的功能都可以訪問它被限定的範圍,並且包括任何父範圍(例如全球/窗口)。如果在另一個函數內部定義,它可以訪問該函數中定義的任何變量。如果像回調那樣作爲參數傳入,它將無法訪問在它傳入的函數中定義的變量,因爲它在該函數之外定義並作爲參數傳入。
例子:
var a = 1;
(function(callback){ //func1
//access variable in parent scope
console.log('func1', a); //outputs 1
//define a new variable within this function's scope
var b = 2;
//call our callback
callback();
//define and call a function within this function's scope
(function(){ //func3
//access variable in parent scope
console.log('func3', a); //outputs 1
//access variable in parent function scope
console.log('func3', b); //outputs 2
})();
})(function(){ //func2
//access variable in parent scope
console.log('func2', a); //outputs 1
//access variable from invoking function
console.log('func2', b); //outputs undefined
});
這將輸出類似:
func1 1
func2 1
func2 undefined
func3 1
func3 2
,所有的功能都可以看到變量a
,因爲它是在一個父範圍擴大到所有的功能。參數函數看不到變量b
,因爲b
是在另一個函數中定義的,而參數函數是在外部定義的並作爲參數傳入的。第一個函數中定義的函數可以同時看到a
和b
。
可能是'{p1:true,m:3}'? –
該函數可以訪問定義的作用域幷包含任何父作用域(例如全局/窗口)。如果在另一個函數內部定義,它可以訪問該函數中定義的任何變量。如果像回調那樣作爲參數傳入,它將無法訪問在它傳入的函數中定義的變量,因爲它在該函數之外定義並作爲參數傳入。 –
伊斯蘭巴巴耶夫抱歉沒有得到它。 Jonathan Kuhn所以問題是,我應該將參數列表中定義的匿名函數看作是另一個函數內定義的函數嗎? –