国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript 嚴格模式use strict詳解

2019-11-19 15:25:44
字體:
來源:轉載
供稿:網友

嚴格模式:由ECMA-262規范定義的JavaScript標準,對javascrip的限制更強。

(非嚴格的模式,被稱為“馬虎模式/稀松模式/懶散模式”。)

一、嚴格模式的使用

嚴格模式可以在腳本或函數級別實現。(即全局和局部模式)

1.全局

在js文件的最前面添加    "use strict"

2.局部

在函數內部添加   "use strict",如下

function fn() {  "use strict";  //some code}

二、嚴格模式和非嚴格模式的對比

1.嚴格模式下,無法刪除(delete)變量(delete是不合格的標識符))。非嚴格模式下會刪除失敗返回false

"use strict";var x;delete x;//報錯Delete of an unqualified identifier in strict mode.(不合格的標識符)

2.嚴格模式中,函數形參存在同名的,拋出錯誤; 非嚴格模式不會

嚴格模式下

function fn(a,a){ "use strict";  result=a+a;  console.log(result);}fn(2,4);//Duplicate parameter name not allowed in this context(重復的參數名稱在此上下文中不允許)

非嚴格模式下

function fn1(a,a){  "use strict";  result=a+a;  console.log(result);}fn1(2,4);//結果為8

3.嚴格模式不允許八進制整數直接量(如下)。非嚴格模式下不會報錯。

"use strict"var x=089;console.log(x);//報錯:Decimals with leading zeros are not allowed in strict mode.

4.嚴格模式中,arguments對象是傳入函數內實參列表的靜態副本(即不再追蹤參數的變化);非嚴格模式下,arguments對象里的元素和對應的實參是指向同一個值的引用。

嚴格模式下

fn(5);function fn(a){  "use strict";  a = 42;  // return a==arguments[0];//返回false  console.log(a);//結果為42  console.log(arguments[0]);//結果為5,嚴格模式下arguments[0]表示這個調用方法的第一個參數     (不再追蹤  參數的變化,在函數內部,參數a被重新賦值為42,但arguments[0]仍然為5.)}

非嚴格模式下

fn(5);function fn(a){  a = 42;  // return a==arguments[0];//返回true  console.log(a);//結果為42  console.log(arguments[0]);//結果為42(追蹤參數變化)}

5.嚴格模式中 eval和arguments當做關鍵字,它們不能被賦值和用作變量聲明

"use strict";var eval=3;//報錯:Unexpected eval or arguments in strict modevar argument=6;//同樣報錯

6.嚴格模式會限制對調用棧的檢測能力,訪問arguments.callee,arguments.callee.caller會拋出異常

嚴格模式下:

"use strict";function fn(n){  if(n==0){    return 1;  }else{    return n*arguments.callee(n-1);  }}console.log(fn(5));//報錯

非嚴格模式下:

function fn(n){//階乘  if(n==0){    return 1;  }else{    return n*arguments.callee(n-1);  }}console.log(fn(5));//正常120

caller:在一個函數調用另一個函數時,被調用函數會自動生成一個caller屬性,指向調用它的函數對象。如果該函數當前未被調用,或并非被其他函數調用,

則caller為null。如下:

嚴格模式下:

"use strict"function fn1() {  var n1= fn1.caller;  console.log(n1);}function fn2() {  fn1();}fn2();//報錯

非嚴格模式下:

function fn1() {  var n1= fn1.caller;//此例中caller指向調用它的函數(fn2)  console.log(n1);}function fn2() {  fn1();}fn2();// 結果打印出:function fn2(){ fn1( ) };

7.嚴格模式變量必須先聲明,直接給變量賦值,不會隱式創建全局變量,不能用with。

嚴格模式下

"use strict";with(obj){  x;}//報錯:Strict mode code may not include a with statement

解釋:道運行腳本時,首先是編譯,然后再執行。顯然在編譯的時候,所以就不能在編譯時確定with語句塊中的變量到底歸屬哪個對象。[with語句塊中的變量是(cl)的屬性

還是上一層變量作用域鏈中的變量。]。只能在執行時才能確定(c1)是Clothes的一個實例。這與嚴格模式有編譯時就檢查變量是否定義沖突,所以嚴格模式不會with語句的使用。

擴展:with語句的使用(用來引用某個特定對象中已有的屬性,但是不能用來給對象添加屬性。)

with(object instance){  //代碼塊}eg:function Clothes(){  this.color="red";  this.size="m";  this.price="cheap";}var c1=new Clothes();with(c1){  var str="顏色:"+color+",尺寸:"+size+",價格:"+price;  document.write(str);}//結果(顏色:red,尺寸:m,價格:cheap)

嚴格模式中 call apply傳入null undefined保持原樣不被轉換為window

總結

以上所述是小編給大家介紹的Javascript 嚴格模式use strict詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石屏县| 木里| 廉江市| 伊吾县| 山阳县| 永年县| 南丹县| 海宁市| 若尔盖县| 灯塔市| 威宁| 镇远县| 云霄县| 永定县| 阿坝| 奉新县| 遵化市| 措美县| 芜湖县| 临潭县| 辉县市| 巴林左旗| 白河县| 军事| 金湖县| 宁津县| 水富县| 中西区| 佳木斯市| 陆河县| 万源市| 遂宁市| 岐山县| 甘泉县| 海晏县| 淄博市| 勐海县| 阳泉市| 兰考县| 吐鲁番市| 东乌珠穆沁旗|