一、严格模式和普通模式的不同?
1、严格 ==》 变量必须通过var进行声明
2、严格 ==》with被禁用
3、严格 ==》eval作用域,eval()内的变量外面是读取不到的。
4、严格 ==》禁止this关键字指向全局变量
5、严格 ==》禁止函数内部遍历调用栈
6、严格 ==》argunments对象的限制:argunments是函数的参数对象,严格模式做了修改:
不允许对argunments赋值
argunments不再追踪参数的变动
禁止使用argunments,无法在匿名函数内部调用自身
例子:var fn=function(num){
num+=100;
alert(num);
alert(argunments[0]);
}
fn(100);
结果:普通:200 200 严格:200 100
7、严格 ==》禁止删除变量
8、严格 ==》对禁止
5、严格 ==》
5、严格 ==》
5、严格 ==》
二、
with 语句用于设置代码在特定对象中的作用域。(在低版本的浏览器中,会有内存泄露的情况,尽量不要使用)
三、严格模式
<script>
"use strict"
<、script>
****with
<script>
var obj={};
var a=2;
var b=3;
with(obj){
alert(a+b);
}
</script>
结果是:5
如果是在严格模式下,就会报错,因为,严格模式下,with是不被承认的
<script>
"use strict" //严格模式
var obj={};
var a=2;
var b=3;
with(obj){
alert(a+b);
}
</script>
结果是:报错
****this
严格模式下,构造函数是会报错的,原因在于this
//"use strict"
var Cat=function(name)
{
this.name=name;
this.say=function()
{
alert(this.name);
}
}
Cat("猫咪");
window.say();
console.log(window);
****eval作用域
"use strict"
//严格模式下,会报错,因为eval()内的变量是读取不到的,只能在eval()内读取
eval("var s=200;alert(s);");
alert(s);
//普通模式下,会报错,因为eval()内的变量,函数外面是不能使用的
/* var abc=function()
{
eval('var s=200;');
}
abc();
alert(s);
*/