今天看到了個面試題
function fn(){ console.log(a); var a = 2; function a(){ }; console.log(a);};fn();變量聲明提升和函數聲明提升,代碼可以這樣理解:
function fn(){ var a; function a(){ }; console.log(a);//這里是什么? a = 2; console.log(a);//2};fn();查了一下,說 函數聲明的權重要比變量聲明的權重大,同名情況下,變量聲明會被忽略。這樣的話,第一個console就是函數本身。事情這樣結束就沒意思了。再看一題。
function a(){ console.log(1);};var a = function(){ console.log(2);}a();//2這就不對了吧。不是說好的函數聲明權重大,同名的變量聲明會被忽略嗎?百思不得姐(解),下班路上寒風一吹,明白了…. 根據變量聲明提升,和函數聲明提升,上面的代碼可以寫成下面這樣。確實是函數聲明權重大于變量聲明,忽略了變量的聲明。但是下面還有給變量a賦值的操作。再調用a();自然就是得到2這個結果了
var a;function a (){ console.log(1);}console.log(a);//"function a (){}"a = function(){ console.log(2);}
|
新聞熱點
疑難解答