为了账号安全,请及时绑定邮箱和手机立即绑定

高程中一个函数声明例子的困惑

高程中一个函数声明例子的困惑

胡子哥哥 2018-11-22 22:14:25
《JavaScript 高级程序设计》第七章函数,关于函数声明的提升问题,有这样一个例子:if(condition){    function sayHi(){        alert("Hi!");    }} else {    function sayHi(){        alert("Yo!");    } }书上原文说:表面上看,以上代码表示在condition 为true 时,使用一个sayHi()的定义;否则,就使用另一个定义。实际上,这在ECMAScript 中属于无效语法,JavaScript 引擎会尝试修正错误,将其转换为合理的状态。但问题是浏览器尝试修正错误的做法并不一致。大多数浏览器会返回第二个声明,忽略condition;Firefox 会在condition 为true 时返回第一个声明。因此这种使用方式很危险,不应该出现在你的代码中。但是我在 chrome 和 js bin里面测试,把 condition 改成 true,都能 alert“Hi”,并没有出现书上说的“大多数浏览器会返回第二个声明,忽略condition”的问题,这是为什么呢:if(true){    function sayHi(){        alert("Hi!");    }} else {    function sayHi(){        alert("Yo!");    } }sayHi();// Hi!
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

true是一个字面量,不是一个变量,浏览器在解析的时候会把你这个if语句直接优化掉,类似于这样:

if(true){

    function sayHi(){

        alert("Hi!");

    }

} else {

    function sayHi(){

        alert("Yo!");

    } 

}


变成

function sayHi(){

    alert("Hi!");

}

然而作者指的是另一种情况


if(condition){

function sayHi(){

    alert("Hi!");

    }

} else {

    function sayHi(){

        alert("Yo!");

    } 

}

var condition = true

sayHi()


查看完整回答
反对 回复 2018-12-26
  • 1 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信