温故而知新:3.重学javascript笔记(js预解释特殊情况下的处理)

一.in属性用法

判断某一个属性是否属于该对象,属于返回true不属于返回false。

var  obj = {name:'feiwu',age:25}
console.log('name' in obj)   //true
console.log('say' in obj)   //false

二.预解释在条件控制语句中

1)不管条件是否成立都会把带var的变量进行提前声明(预解释)

 if(!('total ' in window)){
     var total = 999;
 }
 console.log(total)  //undefined

上面的代码因为total进行了预解释,所以‘total’ in window为true对其进行取反if里面的条件为false,所以最后输出为undefined

三.匿名函数的预解释

预解释的时候只预解释等号左边的不预解释等号右边的值。

fn() //Uncaught ReferenceError: fn is not defined at <anonymous>:1:1
    
var test = function(){
   console.log('test')
}

四.自执行函数下的预解释

自执行函数不进行预解释,因为自执行函数的定义和调用同时发生。

五.return下的变量预解释

return下声明的变量仍然会进行预解释

  function test(){
      console.log(total)  //undefined
      return function(){  //return 后面的为值所以不进行预解释 
      }
      var total = 0;
  }
  test();

六.在预解释的时候如果名字相同了则不会重复预解释,但是会重新赋值

在js中如果变量的名字和函数的名字重复了也算冲突

fn() //2
1)function fn(){console.log(1)}
fn() //2
2)var fn = 10; 
fn() //Uncaught TypeError: fn is not a function a <anonymous>:5:1
3)function fn(){console.log(2)}
fn()

js代码从上 到下执行之前进行预解释,1)函数预解释声明+定义,因为2)函数和1)函数名字相同所以不需要再重新声明,3)函数也是函数名相同也不进行重新声明但是会重新对fn函数重新赋值,预解释完成之后代码从上到下执行第一次输出2,第二次还是输出2第三次因为代码执行fn等于10相当于10()执行,10不是函数所以报错,报错之后导致代码无法进行正常执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值