标签:
ECMAScript中的变量是弱类型的(同一个变量可以保存任何数据类型)。
1 // 3 2 var iNum; 3 console.log(iNum); // undefined 4 5 // 4 6 function fnTest(){ 7 var sMsg = ‘hum‘; 8 console.log(sMsg); // hum 9 } 10 fnTest(); 11 console.log(sMsg); // sMsg is not defined 12 13 // 5 14 function fnTest1(){ 15 sMsg1 = ‘hum‘; // 未通过var关键字声明的变量 16 console.log(sMsg1); // hum 17 } 18 fnTest1(); 19 console.log(sMsg1); // hum 在函数外部能访问
NOTE:为声明的变量只能进行typeof和delete操作,其他任何操作都会抛出错误。
1 console.log(typeof iName); // undefined 2 console.log(delete iName); // true(居然返回true) 3 console.log(iName); // iName is not defined
严格模式注意事项:
1 var iNum1 = 1; 2 3 function fnOuter(){ 4 var iNum2 = 11; 5 6 function fnInner(){ 7 var iNum3 = 111; 8 9 console.log(iNum1); // 作用域链查找:fnInner(无)->fnOuter(无)->window(1) 10 console.log(iNum2); // 作用域链查找:fnInner(无)->fnOuter(11) 11 console.log(iNum3); // 作用域链查找:fnInner(111) 12 } 13 fnInner(); 14 15 console.log(iNum1); // 作用域链查找:fnOuter(无)->window(1) 16 console.log(iNum2); // 作用域链查找:fnOuter(11) 17 console.log(iNum3); // 作用域链查找:fnOuter(无)->window(无)报错 18 } 19 fnOuter(); 20 console.log(iNum1); // 作用域链查找:window(1) 21 console.log(iNum2); // 作用域链查找:window(无)报错 22 console.log(iNum3); // 作用域链查找:window(无)报错
1 var iNum = 1; 2 function fnTest(){ 3 console.log(iNum); // undefined 4 var iNum = 11; 5 } 6 fnTest();
上面的代码输出了undefined。原因是当执行函数fnTest时会检索函数中所有变量的声明并优先执行。上面的代码就类似于下面的代码。
var iNum = 1; function fnTest(){ var iNum; // **变量声明提升 console.log(iNum); // undefined iNum = 11; } fnTest();
标签:
原文地址:http://www.cnblogs.com/tyxloveyfq/p/4293898.html