欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入淺析JS中的嚴(yán)格模式

 更新時(shí)間:2018年06月04日 10:20:02   作者:Cynthia-milk  
嚴(yán)格模式就是使JS編碼更加規(guī)范化的模式,消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為。下面通過(guò)代碼相結(jié)合的形式給大家介紹js中的嚴(yán)格模式,感興趣的朋友一起看看吧

什么是嚴(yán)格模式?

使JS編碼更加規(guī)范化的模式,消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為

怎么使用?

直接添加下面的這句字符串就可以了,這種語(yǔ)法可以向后兼容,如果是不支持嚴(yán)格模式的javascript引擎,就會(huì)直接當(dāng)成是一個(gè)未賦值的字符串字面量,會(huì)直接忽略,支持的引擎就會(huì)開(kāi)啟嚴(yán)格模式

'use strict'

說(shuō)明:

1.在全局作用域使用的話,那整個(gè)js腳本就會(huì)開(kāi)啟這種模式

2.如果是只在函數(shù)內(nèi)部使用的話,那么就只是該函數(shù)內(nèi)部開(kāi)啟而已

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

變量

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

// 未聲明變量
// 非嚴(yán)格模式:創(chuàng)建全局變量
// 嚴(yán)格模式 :拋出referenceEror錯(cuò)誤

2.在嚴(yán)格模式下,對(duì)變量名也是有限制.特別的,不能使用implements,interface,let,package,private等保留字作為變量名,用這些變量命名的話,都會(huì)導(dǎo)出語(yǔ)法錯(cuò)誤

對(duì)象

在嚴(yán)格模式下 操作對(duì)象比在非嚴(yán)格模式下更容易導(dǎo)致錯(cuò)誤,下面幾種情形會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤

1.為只讀屬性賦值會(huì)拋出TypeError

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

3.對(duì)不可擴(kuò)展的對(duì)象添加屬性會(huì)拋出TypeError

函數(shù)

在嚴(yán)格模式下,要求命名函數(shù)的參數(shù)必須是唯一的

// 重命名參數(shù)的
// 非嚴(yán)格模式:沒(méi)有錯(cuò)誤,只能訪問(wèn)第二個(gè)參數(shù),如果要訪問(wèn)第一個(gè)參數(shù),就必須通過(guò)arguments
// 嚴(yán)格模式語(yǔ)法錯(cuò)誤
function sum(num,num){
  //do something   
}

在嚴(yán)格模式下arguments對(duì)象的行為也有所不同.在嚴(yán)格模式下,修改命名參數(shù)的值也會(huì)反映到argument對(duì)象中,但是在嚴(yán)格模式下這兩個(gè)值是完全獨(dú)立的

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

 函數(shù)

 在嚴(yán)格模式中,函數(shù)的參數(shù)必須唯一

// 重名的參數(shù)
// 非嚴(yán)格模式中,沒(méi)有錯(cuò)誤,只能訪問(wèn)第一個(gè)參數(shù)
// 嚴(yán)格模式 :拋出錯(cuò)誤 Uncaught SyntaxError: Duplicate parameter name not allowed in this context
function sum(num,num){
  'use strict'
  // do something 
}

arguments對(duì)象

在非嚴(yán)格模式中,修改命名參數(shù)的值也會(huì)反應(yīng)到arguments對(duì)象中,而嚴(yán)格模式坐下,這兩個(gè)值是完全獨(dú)立的

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

 eval()

 eval函數(shù)最大的變化就是他在包含上下文中不在創(chuàng)建變量或者函數(shù):

// 使用eval函數(shù)創(chuàng)建變量
// 非嚴(yán)格模式中:彈出框彈窗 20
// 嚴(yán)格模式中:調(diào)用alert(x)時(shí)報(bào)錯(cuò)
function doSomething(){
  eval('var x=20')
  alert(x)
}

在嚴(yán)格模式中,可以在eval()中聲明變量和函數(shù),但這些邊行或者函數(shù)只能在被求值的特殊作用域中有效,隨后就將被銷(xiāo)毀,下面這段代碼執(zhí)行就是沒(méi)問(wèn)題的

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

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

抑制this

在非嚴(yán)格模式下使用函數(shù)的apply()或則call()方法時(shí),null和undefined值會(huì)被轉(zhuǎn)換為全局對(duì)象,而在嚴(yán)格模式下,函數(shù)的this值始終是指定的值,無(wú)論指定的是什么值:

// 訪問(wèn)屬性
// 非嚴(yán)格模式:訪問(wèn)全局實(shí)行
// 嚴(yán)格模式:拋出錯(cuò)誤,因?yàn)閠his的值是null
var color = "red";
function displayColor() {
 alert(this.color);
}
displayColor(null);

其他變化

在嚴(yán)格模式中with語(yǔ)句被拋棄掉了,在非嚴(yán)格模式中with語(yǔ)句能夠改變解析標(biāo)識(shí)符的路徑,但在嚴(yán)格模式下,with語(yǔ)句被簡(jiǎn)化掉了,因此,在嚴(yán)格模式下使用with語(yǔ)句是導(dǎo)致語(yǔ)法錯(cuò)誤

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

總結(jié)

以上所述是小編給大家介紹的JS中的嚴(yán)格模式,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論