JS函数知识补充

2021/12/10 JavaScript严格模式

# 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

with语句会形成自己的作用域

# eval函数

eval 是一个特殊的函数,它可以将传入的字符串当作JavaScript代码来运行。

var jsString = "console.log('hello world')"

eval(jsString)//hello world
1
2
3

# 严格模式

# 开启严格模式

  • 给单个js文件开启严格模式
"use strict";

... 

1
2
3
4
  • 对某个函数开启严格模式
function foo(){
    "use strict";
    ...
}
1
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
    8
  • with 语句不允许使用

  • 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
Last Updated: 2022/2/7下午10:20:47