我聽不太懂JavaScript
功能級別範圍,爲C#
程序員看起來有線給我,我會嘗試通過代碼來解釋它:很難理解JavaScript函數級別範圍
CODE#1
//Problem
//if same named variable (as in global scope) is used inside function scope,
//then variable defined inside function will be used,global one will be shadowed
var a = 123;
function func() {
alert(a); //returns undefined,why not just return 123 ?
//how come js knew that there is variable 'a' will be defined and used in
//this function scope ,js is interpreter based ?
var a = 1; //a is defined inside function
alert(a); //returns 1
}
func();
CODE#2
//when a variable(inside function) not named as same as the global,
//then it can be used inside function,and global variable is not shadowed
var k = 123;
function func2() {
alert(k); //returns 123 ,why not 'undefined'
var c = 1;
alert(c); //returns 1
}
func2();
所以我的問題是
在CODE#1爲什麼第一次
a
是undefined
,爲什麼不它只是返回123
?如何 來js
知道有變量'a'將被定義和使用在 這個功能範圍內,js
是基於解釋器?in 代碼#2爲什麼不是
k
是'undefined'?
這就是所謂的'hoisting'在'js' http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html – fedosov
BTW hoising是不一樣的功能級別範圍。嘗試例如(在Firefox中)相同,用'let'代替'var'.it做同樣的事情,'let'具有塊級範圍 – user2264587