# with语句
//with语句会形成自己的作用域
var message = "hello world"
var obj = {name: "okarin" ,agr:19,message:"with"}
function foo(){
function bar(){
with(obj){
console.log(message)//with
}
}
bar()
}
foo()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
with语句会形成自己的作用域
# eval函数
eval 是一个特殊的函数,它可以将传入的字符串当作JavaScript代码来运行。
var jsString = "console.log('hello world')"
eval(jsString)//hello world
1
2
3
2
3
# 严格模式
# 开启严格模式
- 给单个js文件开启严格模式
"use strict";
...
1
2
3
4
2
3
4
- 对某个函数开启严格模式
function foo(){
"use strict";
...
}
1
2
3
4
2
3
4
# 严格模式限制
意外创建全局变量
"use strict"; message = "hello world" console.log(message) function foo(){ age = 20 } foo() console.log(age) //不开启严格模式会创建全局变量age,开启后就报错 age is not defined
1
2
3
4
5
6
7
8
9
10
11
12
13不允许函数有相同的参数名称
"use strict"; function foo(x,y,x){ console.log(x,y,x) } foo(10,20,30) //不开启严格模式 30 20 30 开启报错
1
2
3
4
5
6
7
8静默错误
"use strict"; true.name = "abc" NaN = 123
1
2
3
4不允许使用原来的八进制格式 0123
"use strict"; //原来的 var num = 0123 //现在的 var num = 0o123 //八进制 var num = 0x123 //十六进制 var num = 0b100 //二进制
1
2
3
4
5
6
7
8with 语句不允许使用
eval函数不会向上引用变量
"use strict"; var jsSrting = "var message = 'Hello world'"; eval(jsString) console.log(message)//eval函数不会在全局作用域里面创建一个message变量
1
2
3
4
5严格模式下,this绑定不会默认转成对象
"use strict"; function foo(){ console.log(this) } foo() //这时自执行函数会指向undefined
1
2
3
4
5
6