js學習筆記-第二章變數、作用域和記憶體問題-執行環境和作用域
阿新 • • 發佈:2018-12-06
//執行環境:執行環境(execution context,為簡單起見,有時也稱為“環境”)是 JavaScript 中最為重要的一個概念。執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為
//變數物件:。每個執行環境都有一個與之關聯的變數物件(variable object),
//作用域鏈:當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈(scope chain)。作用域鏈的用途,是保證對執行環境有權訪問的所有變數和函式的有序訪問。
//全域性執行環境的變數物件始終都是作用域鏈中的最後一個物件
//最大的執行環境:window物件;當網頁關閉或瀏覽器關閉時才會被登出
//示例 //解析:執行環境:window、changecolor() //變數物件:window:color、changeColor() // changeColor:無 /*var color = "blue"; function changeColor() { if(color === "blue") { color = "red"; } else { color = "blue"; } } changeColor(); alert("Color is now " + color)*/ //執行環境的型別有兩種:最大的window環境和區域性函式 //延長作用域鏈 with try...catch() //with //分析:with的作用,就是簡化物件的使用,with程式碼塊的內部,首先每個變數被當做區域性變數,如果找不到該變數的定義,會找是不是該物件的屬性 //由於with語句塊中作用域的‘變數物件’是隻讀的,所以在他本層定義的識別符號,不能儲存到本層,而是儲存到它的上一層作用域。 //延長作用域,所以可以返回url /* function bulider(){ var qs = "?debug=true"; with(location){ var url=href+qs;//url屬於上一層環境的變數物件 } return url; //相當於 //var url=window.location.href+qs; }*/ //沒有塊級作用域,只有全域性作用域和函式作用域,除全域性變數,和區域性變數,其他變數都會被當作全域性變數。 if(true){ var a="123";//if語句執行後,不會銷燬,會將當前變數新增到當前執行環境中 } console.log(a);//123