call 调用一个对象的一个方法,以另一个对象替换当前的对象
apply 应用某一对象的一个方法,用另一个对象替换当前对象
call用法:
function add(a,b){
alert(a+b);
}
function sub(a,b){
alert(a-b);
}
add.call(sub,3,1);//add.call等于4,指的就是用add替换成sub,
apply.call()
this用法
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(x); //2
function test(){
this.x = 1;
alert(this.x);
}
test(); // 1
let 和 const
let 指的是可以在块级作用域中使用,可以完全的于全局变量分开,注意的是,先声明在使用,使用范围
for(let i=0;i<3;i++){}; 或者 if(ture){let a = "s"} 这种作用域中
使用问题:
var x=x //不会报错
let x=x //报错,因为没有声明
let、const不能在函数内部重复声明
块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
//IIFE写法
(function (){
var temp = ...;
...
}())
//块级作用域写法
{
let tmp =...;
...
}
级作用域是一个语句,将多个操作封装在一起,没有返回值。
{
let t = f();
t = t * t +1;
}
除非t是一个全局变量,否则是没有办法得到t的值的,这里变为do表达式的时候就可以成立
let x = do{
let t = f();
t * t + 1;
}
const 声明一个只读的常量,一旦声明就没有办法改变
const pi = 3.24; 声明后就赋值,没有办法改变
let 和 const 规则都一样