作用域與閉包

2021-08-04 15:20:11 字數 853 閱讀 6712

執行上下文

範圍:一段或者乙個函式

全域性:變數定義、函式宣告 (一段)

函式:變數定義、函式宣告、this、arguments (函式)

ps:注意「函式宣告」和「函式表示式」的區別

console.log(a);

var a = 100;

fn('zhangsan');

function fn(name)

this

this要在執行是才能確認值,定義是無法確認

var a =

}a.fn();     // this === a

a.fn.call();     //this ====

var fn1 = a.fn;

fn1();      //this === window

作為建構函式執行

function foo(name)

var f = new foo('zhangsan');

作為物件屬性執行

var obj =

}obj.printname;

作為普通函式執行

function fn()

fn();

function fn1(name, age)

fn1.call(, 'zhangsan', 20);

作用域沒有塊級作用域

只有函式和全域性作用域

作用域鏈

閉包閉包的使用場景

函式作為返回值

function f1()

}//f1得到乙個函式

var f1 = f1();

var a = 200;

f1();

函式作為引數傳遞

作用域與閉包

變數存在並產生作用的環境上下文。在es5規範中只有兩種作用域 函式可以巢狀,而每個函式都有自己的作用域,當進入乙個函式的時候,函式環境就會被壓入乙個環境棧當中,當函式執行完畢之後又會出棧,將控制權轉交給外面一層的函式。內部呼叫外部 var a 3 function add add console.l...

作用域 閉包

1.js執行順序 語法分析 預編譯 先生成go物件 1.函式執行生成ao物件 2.形參和變數作為ao物件的鍵名,鍵值是undefined 3.實參賦值給形參 4.在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體 執行js 作用域 變數作用範圍 1.作用域 變數作用範圍 1 函式作用域...

JS作用域與閉包

vo ao 的解釋 1.作用域 es5中只有全域性作用域和函式作用域,我們都知道他沒有塊級作用域。es6中多了乙個let,他可以保證外層塊不受內層塊的影響。即內層塊形成了乙個塊級作用域,這是let的乙個特點。var a 1 function f1 f2 f1 2,1,2 上面的 有三個執行上下文環境...