我的立即调用函数表达式出了什么问题?

时间:2012-02-26 20:04:45

标签: javascript iife

我试图在下面做一个非常简单的IIFE,

<script type="text/javascript">

    var obj = new Object;

    (function(_obj) {_obj.prop = 'defined';})(obj);

    if(typeof obj.prop === undefined)
     alert('undefined');
    else
     alert(obj.prop);

</script>

为什么脚本警告“未定义”而不是“已定义”?

@EDIT

脚本应该按预期工作,除了:

  • 非预期typeof obj.prop === undefined错误,但应使用obj.prop === undefined
  • 当省略下面的括号时,脚本无法按预期工作,但没有从rhino引发语法错误。

    function(_obj) {_obj.prop = 'defined';}(obj);

3 个答案:

答案 0 :(得分:3)

您的代码提醒'defined'但出于错误的原因。

此...

typeof obj.prop === undefined

应该是这个......

obj.prop === undefined

...因为typeof返回一个表示对象类型的字符串。


在测试typeof时,请勿使用undefined黑客攻击。它令人困惑,可能是您遇到的错误的来源。

如果您担心重新定义undefined,请执行此操作...

obj.prop === void 0

答案 1 :(得分:1)

应该是:

if ( typeof obj.prop === 'undefined' )

typeof运算符返回字符串。

答案 2 :(得分:1)

typeof返回一个字符串。所以,你需要;

if(typeof obj.prop === "undefined")

修复此问题后,代码似乎按预期工作:http://jsfiddle.net/jfriend00/KJBjG/