说一说js中的“没节操”的预解释

js预解释是代码执行之前就干了些事,有两类预解释,带var 和带function,具体看看
  • 带var关键字预解释
    alert(n);//弹出undefined
    var n = 10;
  • 带function关键字预解释
    fn();//弹出hello
    function fn(){
    alert('hello');
    }

<b>它们为什么会这样呢?</b>

  • 原因是javascript中有声明和定义这两个概念,我们通常用var关键来声明变量,用function关键字来定义函数,在预解释时,function关键字声明和定义函数是同时执行的,而var它只能声明变量,并不具备定义的功能。

<b>在看一个无节操的例子:</b>

alert(n);//undefined
fn(); //hello
if(false) {
  var n = 10;
  function fn(){
      alert('hello');
  }
}

第一行代码执行会弹出undefined,第二行代码执行会弹出hello;是因为n和fn在代码执行前被预解释了,即使if条件判断为false,执着的浏览器引擎也会将带var关键字声明的变量n和带function关键定义的fn扫描到。

  • 预解释忽略重新声明,不忽略重新定义
    alert(n);//undefiend
    var n = 10;
    var n = 9;
    var n;
    alert(n);//9
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,395评论 2 17
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 10,828评论 0 7
  • 什么是javascript的预解释? 在当前作用域下,JS代码执行之前,浏览器会对带var的和function的进...
    知识搬运工horace阅读 2,910评论 0 0
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,526评论 1 10
  • 所谓人生,总会从幼稚走向成熟,一步一步担起应有的责任,那么,成熟的9个标志,你有吗?
    小阿成阅读 3,056评论 0 2

友情链接更多精彩内容