JavaScript函數內部修改全局變量的問題【一道面試題】


JavaScript函數內部修改全局變量的問題

今天 10:44梵天蓮華 | 瀏覽 23 次
代碼如下,為什么加了 function a(){};這個函數,就不能改變全局變量a的值了?
var a = 1;
function b(){
a = 2;
console.log(a);
//有函數,a不變;沒函數,a變2
function a(){};
}
b();//輸出2
console.log(a);//輸出1
 
今天 11:07 提問者采納
 
因為
A. JavaScript中函數就是一種值而已, 與數字對象字符串等都是值
B. JavaScript會預解析整個代碼後執行, 其中一點是會把function FunctionName(){}這種形式的函數聲明帶定義預先綁定到其所在的作用域
所以, 你的b函數函數體等價於
function b()
{
function a(){}

a = 2

console.log(a)

}
因此不會改變全局的值
追問:
今天 11:44
感謝回復,B中的函數聲明提前我了解一些,倒是A給我很大啟發。你的意思是,變量a=2其實是把函數a()重新賦值成數字變量了?那么函數a()可以看成是一個局部變量,a=2雖然前面沒有加var,但也只是給a()這個局部變量重新賦值,但a依然是一個局部變量,只是與函數外面的全局變量a=1重名,這樣理解對嗎?
追答:
今天 11:52
'變量a=2其實是把函數a()重新賦值成數字變量了?'

正確
'但a依然是一個局部變量,只是與函數外面的全局變量a=1重名'

正確
追問:
今天 12:47
好的,非常感謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM