首先看一个例子:函数
function Foo() {this
getName = function () { alert (1); };spa
return this;code
1 'use strict'; 2
3 function foo() { 4 var x = 'Hello, ' + y; 5 alert(x); 6 var y = 'Bob'; 7 } 8
9 foo();
对于上述foo()
函数,JavaScript引擎看到的代码至关于:对象
function foo() { var y; // 提高变量y的申明
var x = 'Hello, ' + y; alert(x); y = 'Bob'; }
把var y = 'Bob';拆分为了 var y ;y='Bob';因此y的值为undefined
function foo() { var x = 1, // x初始化为1
y = x + 1, // y初始化为2
z, i; // z和i为undefined
// 其余语句:
for (i=0; i<100; i++) { ... } }
window
a
和访问window.a
是彻底同样的
'use strict'; function foo() { for (var i=0; i<100; i++) { // } i += 100; // 仍然能够引用变量i
}
let
,用let
替代var
能够申明一个块级做用域的变量
'use strict'; function foo() { for (var i=0; i<100; i++) { // } i += 100; // 仍然能够引用变量i
}