1、什么是ES5
- 概念:
ES5
指的是:ECMAScript 5
,它是JavaScript
语言的国际标准。ES5
通过对现有JavaScript
方法添加语句
和原生ECMAScript对象做合并实现标准化- 还引入了一个语法的
严格变种
,被称为“严格模式”
。
2、如何开启严格模式
- 写法:
"use strict"
- 解释:
- 只要将
"use strict"
这个字符串放在代码的前方,后面的代码就会按照严格模式
进行解释
- 只要将
- 开启类型:
局部开启
:让函数内部的代码遵循严格模式,主要是为了避免不规范的代码全局开启
:让所有代码都遵循严格模式
- 参数严格
严格
就是只要出现错误,就不姑息—会直接报错- 报错会让代码写的更严谨,能更及时的排查代码中的隐患
// 1、常规写法 => 现实中几乎不会出现这样的错误
function poo(){
function a( b , b , c ){ // 这里写了两个同名的参数 => 参数错误,在非严格模式下,是可以允许的
console.log( b , c ); // 打印b的结果为2,会理解成1赋值给b一次,在把2赋给它一次,3是正常赋值给c的
}
a( 1 , 2 , 3);
}
poo();
// 2、局部严格模式
function foo(){
"use strict" // 开启严格模式 => 后续的代码都会按照严格模式进行解释
function a( b , b , c ){
console.log( b , c ); // 严格模式下 => 会直接报错,显示有同名参数
}
a( 1 , 2 , 3);
}
foo();
- arguments关键字
- 在
函数
中使用的关键字
,这个关键字可以:获取多个参数,并且还可以访问当前函数本身 arguments关键字
可以在没有形参的情况下,获取到实参的内容
- 在
解释:
// 1、console.log( arguments )时得到的结果是一个伪数组
// 2、为数组中的callee代表着当前函数本身,可以通过arguments.callee直接调用本身
// 3、之前在递归中需要函数调用自己,但是使用arguments关键字,可以写成 => console.log( arguments.callee ) 通过打印可得当前的foo函数
// 4、arguments.callee 可以代表当前函数本身 => 一般会应用在匿名函数中,但如果在匿名函数中还调用自身的话,就不太可取了
// 5、arguments.callee 在严格模式中被禁用了
// 6、arguments可以不用形参,获取到所有传递过来的实参 => 用来处理不确定传递多少实参的情况下,有一定的作用
function foo(){
"use strict"
// console.log( arguments.callee ); ==> 严格模式下,是被禁用的功能
for(var i = 0 ; i < arguments.length ; i ++){ // 可以遍历arguments,获取所有传入的实参
console.log( arguments[i] );
}
}
foo( 1 , 2, 3, 4, 5, 6, 6666,4444,3333,222,1111 );
3、严格模式中对this指向的严格
- 解释
this关键字
描述的是函数的调用者
- 函数调用时才能确定调用者是谁,函数是在哪里取出(.)的,那么这个函数的调用者就是谁,
- 函数的调用者是在
函数调用时决定
的
- 注意
this
指向window对象
毫无作用
- 补充
- 如果
this
指向了window
—那么就会让this
变为undefined
,因为undefined
不能使用取出运算,所以在进行取出运算的时候会报错
- 如果
- 三种示例this的指向结果
"use strict" // 全局开启严格模式
// 1、普通函数的this指向
function foo(){
console.log( this ); // 打印得到指向了window
}
foo(); // 如果函数被直接调用,此时函数的调用者就是 => window,window.foo(); = foo();
// 2、对象内部的this指向
var obj = {
fn : function(){ // 这里的fn是key值 function是value值
console.log( this ); // this指向就是它的调用者,此时打印结果为obj
}
}
obj.fn(); // 取出obj中的fn => 此时的调用者就是obj
// 3、变量中的this指向
var fn = obj.fn; // 把函数地址赋值给了fn变量
fn(); // 此时的this指向是window