首先看一個例子:函數
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
}