JS学习之路--11

注意
该文章由JS小白(本人)编写完成,仅为个人总结和理解,若有纰漏和误解,还望多多指出,共同成长😋

js严格模式

"use strict"
当我们在环境顶部使用"use strict",后面的代码会按照严格模式的语法进行解析
严格模式:规避了js里不严谨不规范的地方,增强了代码的安全性,提高了编译器的编译效率,为后续版本做铺垫

严格模式有如下几条规定:
1.变量声明
变量必须先声明再使用


2.禁止使用with

var obj = {age:20};
with(obj){      
    console.log(age);
}    
严格模式下会报错,禁止使用with语句
非严格模式下会输出20.



3.设立eval作用域

eval("var a = 10; console.log(a)");  
console.log(a);
严格模式下 eval内为一个作用域,此时第二个console.log会报错a为定义。
非严格模式下会输出两个10.



4.函数中的this指向问题

函数中谁调用了this,this就指向谁
function foo(){
        console.log(this);
    }
foo(); 
严格模式下 此处this没有指向,会返回undefined。
非严格模式下此处this会指向window。



5.删除变量
在严格模式下使用delete会报错

6.函数参数不能重名

function foo(x,x){
    console.log(x);  严格模式下报错,参数不能相同
}
foo(2);
非严格模式下此处会返回第二个值,但第二个没有实参只有形参,所以会返回undefined。



7.八进制字面量表示法

var num = 017;
console.log(num);   严格模式下报错,非严格模式下会输出15 
            
var num = 0o17;      严格模式下要在0后面添加小写的'o'然后再跟八进制数字。
console.log(num);    使用ES7八进制



8.arguments不追踪参数变化

function foo(x){
    console.log(arguments[0]); 
    x = 2;
    console.log(arguments[0]);
}
foo(1);

严格模式下 argumens不会因为参数重新赋值而改变 输出1,1
非严格模式下会改变,输出 1,2



以上是关于JS第十一小节的总结,下次再见😘

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容