1. 程式人生 > >js---嚴格模式

js---嚴格模式

基於es3.0和es5.0新增的方法使用的,es3.0和es5.0產生矛盾的地方在嚴格模式下就是採用的es5.0,否則js解析採用es3.0

注意:"use strict"要放在邏輯的最頂端(程式碼的最頂端,有作用範圍,在函式最頂端就是當前函式採取嚴格模式)

嚴格模式:

1.不允許用with(){}---with可以改變作用域鏈的結果,極費效率,將obj放在作用域鏈的頂端,相當於移動了所有原先的AO

所以嚴格模式下不允許用。

var obj={name:'lin'};
var name="scope";
with(obj){
    console.log(name);//lin
}

2.變數必須加var ; arguments.callee和caller都不能用。

3.區域性的this必須賦值,被賦值的就是this的值,不賦值就是undefined

  1.常規模式中預編譯會直接給this賦值window;而在嚴格模式下不會產生預設this是window的情況,沒賦值就是undefined;

  2.常規模式下:test.call(123)會將123包裝成Number物件賦給this,不允許出現this是原始值的情況;

     嚴格模式下:test.call(123)中,this就是123,賦值是什麼就是什麼。

4.test(name,name){}---嚴格模式拒絕重複屬性(物件中有相同屬性名也不行,暫時不報錯。重複引數會報錯)

  1.常規模式:test(1,2) name是取後一個的值(函式體內的name就是2)

  2.嚴格模式:test(1,2) ---error.不允許形參相同。

5.eval('XXX')---XXX的字串可以寫js邏輯程式碼,然後可以解析執行

!!!eval在es3.0和es5.0都不能用,因為會改變作用域,很危險。