亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析JS中的嚴格模式

發布時間:2020-10-13 22:54:14 來源:腳本之家 閱讀:161 作者:Cynthia-milk 欄目:web開發

什么是嚴格模式?

使JS編碼更加規范化的模式,消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為

怎么使用?

直接添加下面的這句字符串就可以了,這種語法可以向后兼容,如果是不支持嚴格模式的javascript引擎,就會直接當成是一個未賦值的字符串字面量,會直接忽略,支持的引擎就會開啟嚴格模式

'use strict'

說明:

1.在全局作用域使用的話,那整個js腳本就會開啟這種模式

2.如果是只在函數內部使用的話,那么就只是該函數內部開啟而已

function doSomething(){
 'use strict' 
 // 其他代碼 
}

變量

1. 在嚴格模式中什么時候創建變量以及怎么創建變量都是有限制的.首先,不允許意外創建全局變量.在非嚴格模式下是可以像下面這樣創建全局變量,但是嚴格模式中是不可以的

// 未聲明變量
// 非嚴格模式:創建全局變量
// 嚴格模式 :拋出referenceEror錯誤

2.在嚴格模式下,對變量名也是有限制.特別的,不能使用implements,interface,let,package,private等保留字作為變量名,用這些變量命名的話,都會導出語法錯誤

對象

在嚴格模式下 操作對象比在非嚴格模式下更容易導致錯誤,下面幾種情形會導致語法錯誤

1.為只讀屬性賦值會拋出TypeError

2.對不可配置的屬性使用delete 操作符會拋出TypeError

3.對不可擴展的對象添加屬性會拋出TypeError

函數

在嚴格模式下,要求命名函數的參數必須是唯一的

// 重命名參數的
// 非嚴格模式:沒有錯誤,只能訪問第二個參數,如果要訪問第一個參數,就必須通過arguments
// 嚴格模式語法錯誤
function sum(num,num){
  //do something   
}

在嚴格模式下arguments對象的行為也有所不同.在嚴格模式下,修改命名參數的值也會反映到argument對象中,但是在嚴格模式下這兩個值是完全獨立的

function showValue(value){
 value = 'foo'
 console.log(value)
 console.log(arguments[0]) // 非嚴格模式 : 'foo' 嚴格模式 :'hello'
  
}   
showValu('hello')
                              

 函數

 在嚴格模式中,函數的參數必須唯一

// 重名的參數
// 非嚴格模式中,沒有錯誤,只能訪問第一個參數
// 嚴格模式 :拋出錯誤 Uncaught SyntaxError: Duplicate parameter name not allowed in this context
function sum(num,num){
  'use strict'
  // do something 
}

arguments對象

在非嚴格模式中,修改命名參數的值也會反應到arguments對象中,而嚴格模式坐下,這兩個值是完全獨立的

// 修改命名參數的值
// 非嚴格模式:修改會反應到arguments中
// 嚴格模式中不會反應到arguments中
function sum(num,num2){
  'use strict'
num=3
  console.log(arguments[0],num2)// 嚴格模式下輸出為1,2 非嚴格模式下輸出為3,2
}
sum(1,2)

 eval()

 eval函數最大的變化就是他在包含上下文中不在創建變量或者函數:

// 使用eval函數創建變量
// 非嚴格模式中:彈出框彈窗 20
// 嚴格模式中:調用alert(x)時報錯
function doSomething(){
  eval('var x=20')
  alert(x)
}

在嚴格模式中,可以在eval()中聲明變量和函數,但這些邊行或者函數只能在被求值的特殊作用域中有效,隨后就將被銷毀,下面這段代碼執行就是沒問題的

'use strict'
var result=eval('x=1,y=13;x+y')
alert(result)

在這里,eval中聲明了變量x和y,然后將他們加在一起,反悔了他們的和,于是result變量的值就是21,即x+y的結果,在調用alert時,盡管x和y已經不存在了,result變量的值還是有效的

抑制this

在非嚴格模式下使用函數的apply()或則call()方法時,null和undefined值會被轉換為全局對象,而在嚴格模式下,函數的this值始終是指定的值,無論指定的是什么值:

// 訪問屬性
// 非嚴格模式:訪問全局實行
// 嚴格模式:拋出錯誤,因為this的值是null
var color = "red";
function displayColor() {
 alert(this.color);
}
displayColor(null);

其他變化

在嚴格模式中with語句被拋棄掉了,在非嚴格模式中with語句能夠改變解析標識符的路徑,但在嚴格模式下,with語句被簡化掉了,因此,在嚴格模式下使用with語句是導致語法錯誤

// with語句
// 非嚴格模式:允許
// 嚴格模式:拋出語法錯誤
with (location) {
 console.log(href);
}

總結

以上所述是小編給大家介紹的JS中的嚴格模式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

萨迦县| 巩留县| 卓尼县| 广平县| 都昌县| 菏泽市| 札达县| 黎川县| 莲花县| 高碑店市| 深泽县| 多伦县| 玛多县| 麻城市| 济南市| 那曲县| 石家庄市| 荆州市| 察隅县| 满洲里市| 株洲县| 宾川县| 涞水县| 泌阳县| 饶平县| 腾冲县| 扶绥县| 宁南县| 荥阳市| 伊春市| 上蔡县| 大丰市| 天镇县| 尉犁县| 甘孜县| 南城县| 开鲁县| 广河县| 三门县| 库尔勒市| 新乡市|