多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
6、 `D` ~~~javascript 1.var a=10,b=11,c=12; 2.function test(a){ 3. a=1; //a是私有的变量 4. var b=2; 5. c=3; //全局的 6.} 7.test(10); 8.console.log(a); 9.console.log(b); 10.console.log(c); 11. 12./* 13. A、1 11 3 14. B、10 11 12 15. C、1 2 3 16. D、10 11 3 *** 17.*/ ~~~ 7、`B` ~~~javascript 1.if(!("a" in window)){ 2. var a=1; 3.} 4.console.log(a); //undefined 5. 6./* 7. A、1 8. B、undefined *** 9. C、报错 10. D、以上答案都不对 11.*/ 全局作用下,不管条件是否成立,先申明var a ~~~ ~~~ /* * 变量提升 * var a; 不管条件是否成立都要进行变量提升, * 在全局作用域下声明的变量,也相当于给window设置了一个对象的属性 * 而且两者之间建立了映射的机制 <=> window.a=undefined; */ /* * in:检测某一个属性是否隶属于这个对象 * (不管是私有属性还是公有属性,只要有这个属性结果就是TRUE) * hasOwnProperty:检测某一个属性是否为对象的私有属性 * (只有这个属性是私有的才可以) */ if (!("a" in window)) {//=>"a" in window =>TRUE var a = 1; } console.log(a); //undefined ~~~ 8、`D` ~~~javascript 1.var a=4; 2.function b(x,y,a) { 3. console.log(a); 4. arguments[2]=10; 5. console.log(a); 6.} 7.a=b(1,2,3); 8.console.log(a); //undefined 9. 10./* 11. A、3 3 4 12. B、3 10 4 13. C、3 10 10 14. D、3 10 undefined *** 15.*/ ~~~ ~~~ /* * 变量提升 * var a; * b = aaafff000; */ /* var a = 4; function b(x, y, a) { /!* * 形参赋值:x=1 y=2 a=3 ,x,y,a是私有变量 * 变量提升 *!/ //=>arguments:函数内置的实参集合,不管是否设置形参, 传递的实参值在这个集合中都存在 /!* * arguments * { * 0:1 * 1:2 * 2:3 * length:3 * callee:函数本身 * ... * } *!/ /!* * 在JS非严格模式下,函数中的形参变量和ARGUMENTS存在映射机制(映射:相互之间影响) * 第一个形参变量值修改为100,那么ARG[0]的值也跟着修改为100 * ARG[1]的值修改为200,那么第二个形参变量Y的值也会跟着变为200 * ... *!/ console.log(a); //=>3 arguments[2] = 10;//=>把传递的第三个实参值修改为10,此时第三个形参变量a也会受到影响 console.log(a);//=>10 } a = b(1, 2, 3);//=>a=b执行的结果 =>a=undefined [b函数中并没有编写return,所以默认函数的返回值是undefined] *** console.log(a); //undefined */ ~~~ ![](https://img.kancloud.cn/fe/e9/fee98b0d58d2cbc4c55bd67769c0ed83_764x487.png) ~~~ /* function fn(x, y) { /!* * 形参 * x=10 * y=undefined y也是私有变量,不是没赋值,而是赋值为undefined * * ARG * 0:10 * length:1 * * ARG和形参之间的映射是以ARG的索引为基础完成的, * ARG中有这个索引,浏览器会完成和对应形参变量中的映射机制搭建, * 如果形参比ARG中个数多,那么多出来的形参是无法和ARG中 * 对应的索引建立关联的 *!/ var arg = arguments; arg[0] = 100; console.log(x);//=>100 y = 200; console.log(arg[1]);//=>undefined } fn(10);*/ ~~~ ![](https://img.kancloud.cn/72/79/727905cf5f04aacc26cfa89091686376_432x200.png) ~~~ /* function fn(x, y) { var arg = arguments; /!* * x=10 y=undefined * * ARG fn(10);只传了一个参数 * 0:10 * length:1 *!/ // y = 200; // console.log(arg[1]);//=>undefined arg[1] = 300; /!* * ARG * 0:10, * 1:300, * length:2 *!/ console.log(y); //undefined y=400; console.log(arg[1]); //300 //=>ARGUMENTS和形参的映射机制建立在函数执行后形参赋值的一瞬间, 此时能建立映射机制的建立映射机制,不能建立起来的,以后不管怎么操作都 无法再建立了 } fn(10); */ ~~~ ![](https://img.kancloud.cn/5f/b8/5fb894f772517e17e53db23573ef6f6f_519x240.png) ~~~ //=>JS严格模式 //> 在当前作用域的“第一行”添加 "use strict" 即可, 这样在当前作用域中就开启了JS的严格模式 /*--us [TAB]--*/ // "use strict";//=>整个JS都开启了严格模式(只对当前这个JS文件中的代码 生效,下一个JS文件需要开启严格模式,第一行还需要再次编写), 真实项目中,我们一般都会把所有JS文件合并压缩为一个导入到页面中 /*function fn() { // "use strict";//=>只在当前作用域中使用严格模式 }*/ ~function () { "use strict"; //... }(); ~~~ ~~~ //=>1.在严格模式下不支持使用 “arguments.callee / arguments.callee.caller” (Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them) //=>2.在严格模式下ARGUMENTS和形参没有映射机制 //=>3.在严格模式下不允许给一个对象设置重复属性名的: “obj={n:10,n:20}” //=>4.在严格模式下,函数执行,如果没有明确指定执行的主体 (函数前面没有点),不再像非严格模式下一样,统一都交给window, 而是让this指向undefined,代表没有执行主体:“严格模式下, 有执行主体this就指向谁,没有执行主体,this就是undefined” //=>高程三,最后有严格模式和非严格模式汇总 ~function () { /*function fn(x) { arguments[0]=100; console.log(x);//=>100 存在映射机制 } fn(10);*/ /*var obj={ n:10, n:20 }; console.log(obj.n);*/ function fn() { console.log(this);//=>window } fn(); }(); ~function () { "use strict"; /*function fn(x) { arguments[0]=100; console.log(x);//=>10 不存在映射机制 } fn(10);*/ /*var obj={ n:10, n:20 }; console.log(obj.n);*/ function fn() { console.log(this);//=>undefined } fn(); }(); ~~~