[英]Variable scope in function expressions
我最近一直在學習JavaScript的一些基礎知識,並花了很多時間來分解一些函數表達式以更好地理解它們。 我仍然不確定幾個示例中實際發生了什么,如果我錯了,我想對此進行一些解釋,或者至少確認我的思路是否正確。
共有三段代碼,它們之間略有不同:
var my_number = 7;
var timesTwo = function(number) {
my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
。
var my_number = 7;
var timesTwo = function(number) {
var my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
。
var my_number = 7;
var timesTwo = function(my_number) {
my_number = my_number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
我很好奇的是究竟發生了什么使他們像他們一樣工作。
第一種情況似乎是相對簡單的my_number
從全局開始, number
在函數本地,並且my_number
在函數內部更改,因此在全局框架中為10。
第二種情況也很清楚-與第一種情況相似,只是在函數內部有一個新的局部變量my_number
分配了10,而在函數my_number
之外仍為7。
我不確定的是第三部分。 我假設既然所有提到的number
現在my_number
,則該函數在以下行中創建一個新的my_number
變量:
var timesTwo = function(my_number)
即使函數體中沒有var my_number
?
var my_number = 7;
var timesTwo = function(number) {
my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
第一個示例在全局范圍內聲明my_number
並將其值設置為7
。 timesTwo
是一個在其參數中接受自變量的函數,然后在該函數中將其引用為number
。 調用該函數時,您正在將全局范圍中定義的my_number
變量設置為等於傳入的參數乘以2。 您正在使用“內部”和“外部”調用記錄相同的結果。
var my_number = 7;
var timesTwo = function(number) {
var my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
在第二個例子中,您聲明一個局部范圍my_number
的內timesTwo
功能。 因此,您在“內部”和“外部”調用中記錄了不同的my_number
變量。
var my_number = 7;
var timesTwo = function(my_number) {
my_number = my_number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
在第三個示例中, timesTwo
接受一個參數,並使用變量my_number
進行跟蹤。
這稱為可變陰影 。
在函數定義中,指定my_number
參數,該參數將新的局部變量引入函數范圍。
這將my_number
外部的my_number
以便在函數體內對my_number的任何引用都將引用傳入的參數,而不是外部的my_number變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.