直接上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
!function(){
x = 1;
console.log( window.x );
}();
!function(){
'use strict';
x = 1;
console.log( window.x );
}();
</script>
</body>
</html>
在看js的严格模式的时候 自己动手做观察 发现一个问题 当我两个函数一起执行的时候,分别打印出1 当我注释掉第一个函数 只执行第二个的时候 就报错 这是什么原因 求指导
还有一个问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
!function(a){
'use strict';
arguments[0] = 100;
console.log( a );
}(1);
!function(a){
'use strict';
arguments[0].x = 100;
console.log( a );
}({ x: 1 });
</script>
</body>
</html>
这里第一个打印出来的是1 怎么第二个打印出来的是100 严格模式对参数是对象不起作用吗
1.严格模式下,禁止使用未声明对象。
2.严格模式下,args和形参值相等,但是两者不存在时刻相等关系(仅在初次赋值时两者相等,后面修改一个不会改变另一个)
3.变量的值为对象类型时,存储的是对象的地址,对象里面随便折腾,只要对象地址不变,由2可知两者存储的地址还是相同的,所以还是相等的