js 杂记

1. var是函数级作用域,let是块级作用域

在for中声明,外部可以访问var 不能访问let

在函数中声明,var作用域是整个函数

在函数外声明,var作用域和全局变量一样,全局变量可以被删除,var 不能

2. 外部函数执行,会开辟一块内存空间


function outerFn(){
  var i = 0; 
  function innerFn(){
      i++;
      console.log(i);
  }
  return innerFn;
}
var inner = outerFn()
inner();1
inner();2
inner();3
var inner2 = outerFn();
inner2();1
inner2();2
inner2();3
console.log(outerFn==outerFn) //true
console.log(outerFn()==outerFn()) //false
//在这里两次执行外部函数outerFn,开辟了两个不同的内存空间,var i是函数中的局部变量,所以在两个不同空间中i不同,修改一个i的值不影响另一个

3.在全局上下文中, let 声明的变量不属于window的属性 var和全局变量属于

let a=2;
var b=3;
c=4;
console.log(window.a) //undefined
console.log(window.b) //3
console.log(window.c) //4

另外 在相同作用域中 var可以重复声明,let和const不行

另外

var a=1;
b=2;
delete a; //false;
delete b; //true;
console.log(window.a); //1
console.log(window.b); //undefined

4.事件绑定是改变this指向

var a="window";
var obj={
    a:"obj",
}
function fn(){
     console.log(this.a)
}
console.log(fn.call(obj)) //obj undefined
console.log(fn.bind(obj)) //function () { [native code] }

call立即执行并返回undefined(函数返回值)

bind等待执行并返回函数指针

所以当绑定事件需要改变this指向时应该用bind

document.onclick=fn.bind(obj);
function fn(){

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值