作用域鏈&&嚴格模式

作用域鏈

  1. 迷惑性代碼
var a = 100;
function test(){
    console.log(a);
}
function testFun(){
    var a = 200;
    test();
}

不假思索的想到 輸出的一定是 200啊 ,然而結結實實被打臉,輸出 100

原因

在編譯時,

  1. 全局作用域中會存有的對象
  • a
  • test
  • testFun
  1. testFun作用域中存的
  • a
  1. test

在運行時,

test() 我這里需要變量a 啊,但是在test的作用域中并不存在,那么就需要去全局作用域中尋找 a,報告老大找到了,輸出全局作用域中的a,輸出100

  1. 迷惑性代碼
var a = 100;
function testFun2(){
    var a = 300;
    function test(){
        console.log(a)
    }
    test();
}
testFun2();

輸出什么? 300!

?!為什么呢

作用域鏈再走一波

1.全局作用域

  • a
  • testFun2
  1. testFun2
  • a
  • test
  1. test

運行時test時,報告老大,我需要變量a ,test作用域:我沒有啊,你去看看testFun2有沒有;
testFun2作用域:我有 給你拿去好了;
輸出 300

嚴格模式

實例

'use strict';
x = 3.14; //  報錯(x 未定義)

'use strict'
myFunction();
function myFunction(){
    y = 3.14;  //  報錯 (y 未定義)
}

// 不允許刪除變量或對象
'use strict';
var x = 3.14;
delete x ;

// 不允許刪除函數
'use strict';
function x(p1,p2){};
delete x ;
//  報錯
// 不允許變量重名
'use strict';
function x(p1,p1){} //  報錯 

// 不允許使用八進制

'use strict';
var x = 010;   // 報錯
// 不允許使用轉義字符
'use strict';
var x= \010;   // 報錯
//  不允許對只讀屬性賦值
'use strict';
var obj ={};
Object.defineProperty(obj,'x',{value:0,writable:false});
obj.x = 3.14;

// 不允許對一個使用 getter方法讀取的屬性進行賦值
'use strict';
var obj ={get x(){return 0}};
obj.x=3.14; //  報錯

// 變量名 不能使用 'eval'字符串
'use strict';
var eval = 3.14; //  報錯
//變量名不能使用 'arguments'字符串
'use strict';
var arguments = 3.14;  //報錯
// 禁止 this 關鍵字指向全局對象

function test(){
    console.log(this); // undefined
}

嚴格模式新增的一些保留關鍵字
  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、作用域 一個變量的作用域(scope)是程序源代碼中定義的這個變量的區域。 1. 在JS中使用的是詞法作用域(...
    掙脫吧小白閱讀 449評論 0 0
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 首先,JavaScript確實是一門編譯型語言,與C等典型編譯型語言相比,區別在于JavaScript的編譯過程(...
    環零弦閱讀 5,633評論 0 18
  • 變量 變量分為全局變量和局部變量,全局變量就是指該變量的作用域為當前文檔,也就是說全局變量在當前文檔的所有Java...
    jrg陳咪咪sunny閱讀 362評論 0 1
  • 一個多月了沒有寫了 都寫在本子上了 我不知道該用什么詞形容我現在的狀態 你想要抓住一根稻草 想要別人拯救你 殊不知...
    MHE_ire閱讀 494評論 1 2