我一直在觀看道格拉斯克羅克福德的視頻系列。我對將變量賦值爲一個將變量賦值爲全局變量的參數的關係有點困惑,讓我來演示一下。變量與參數範圍和賦值
var bob = 22; //global scope
function funky(parameter){
parameter = null; //sets the var passed in to null
bob = 44; //sets the bob
}
var hello = [];
funky(hello); // hello still has the value of an empty array even after the function is invoked.
bob; // value is 44
因此,當funky()被調用時,'var bob'被賦值44。這個鮑勃擁有超出功能範圍的新價值。
var hello作爲一個參數傳遞,而funky裏面,它的值爲null,當hello在全局空間被調用時,它的值爲空,它包含一個空數組的值。
這是我必須背誦的東西嗎?如果將全局作用域中的已定義變量作爲參數傳遞,它將只在該函數的作用域內保存新的已分配值?我是否在更廣泛的範圍內缺少某些參數如何傳遞和分配給函數?
這裏是代碼的repl.it與console.log輸出,而在函數/全局作用域內部和外部。
一時間,覺得你會想怎麼回事,這個工作?你越想回答這個問題,你就會意識到這是它應該如何工作,然後你就會理解這個模式,而且你不必再記住了! – Kiran
此外,全局變差。避免它們! – m59
其他人會糾正我,如果我錯了,但從技術上講,'bob'不是全局的,因爲它沒有被添加到全局對象(通常是'window')。這只是一個非局部變量。當'funky'引用'bob'時,JavaScript會創建一個[closure](http://en.wikipedia.org/wiki/Closure_(computer_programming)),它允許函數訪問該變量。 –