javascript - if语句判断条件中的非匿名函数表达式为什么无法调用?
黄舟
黄舟 2017-04-10 14:55:10
[JavaScript讨论组]
  var x = 1;
  if (function f(){}) {
    x += typeof f;
  }
  x;

返回值为"1undefined"

它们应该是在同一作用域,为什么type语句调用不到f函数?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
巴扎黑

这和if没有关系

jsvar x = function f(){}; console.log(typeof x, typeof f);
//function undefined

这是函数表达式和函数声明语句的区别,前者带名字只会影响x.name而不会声明对应的变量,后者不仅会声明,还有提升的效果,比如

jsconsole.log(typeof g); function g(){};
//function
伊谢尔伦

函数表达式的函数名作用域是闭包内。除了IE8貌似有bug。

黄舟
if ( expression ) statement

所以這裏的 function f(){} 是一個函數表達式,over。

PHP中文网

很簡單了

js var x = 1;
  if (function f(){}) {
    x += typeof f;
  }
  x;

首先我們分析下, if裡面是true還是false. !!function f(){} -> true
所以我們知道 x += typeof f; 要執行.

又因為

ECMA 5 (13.0) defines the syntax as

javascriptfunction Identifieropt ( FormalParameterListopt ) { FunctionBody }

所以f是沒有定義的, 於是typeof f 就是'undefined' 是一個string.

1+'undefined' = '1undefined'. 所以答案就出來了.

Ref:
Function Declarations vs. Function Expressions

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号