javascript - 在 "var new_function = function name(){};"中用 javascript 定义函数名有什么好处吗?

标签 javascript

当我运行一个程序来更改我的 javascript 代码的某些部分时,它在将 var 声明为函数时出现错误,如下所示:

var some_function = function name(args){
//do stuff
};

代码本身有效,但我只是想知道是否可以删除我发现的所有函数的“名称”(因为它不会在分析我的 javascript 的其他问题中破坏它)或者它是否可以它可能有我看不到的任何用途。

删除“名称”:

var new_function = function(){/*do stuff*/};

注意:它第一次出现的原始文件在 jquery-1.6.4.js 中在:

jQuerySub.fn.init = function init( selector, context ) {
    if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
        context = jQuerySub( context );
    }

    return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
};

提前寻求任何帮助:)

最佳答案

函数表达式的名称标识符,只能在函数本身内访问。

在您的 jQuery 示例中,甚至没有使用 init 标识符,所以我认为命名函数的唯一好处只是为了调试目的,调试器将能够向您显示函数名称在一长串电话中。

比较:

anonymous functions on stack

对比

named functions on stack

缺点是存在的,IE <=8 上的一个长期存在的错误使得命名函数表达式将名称标识符泄漏到其封闭范围,而且创建两个函数对象,例如:

var foo = function bar() {}; 

typeof bar; // "function" on IE
foo === bar; // false, two different objects

为了避免这个错误的副作用,有几种解决方法,例如,在立即调用的函数中工作,在该范围内创建函数声明,然后返回它,例如:

jQuerySub.fn.init = (function () {
  function init( selector, context ) {
    //...
  }

  return init;
})();

和其他类似的方式,我会推荐你​​查看下面的文章:

关于javascript - 在 "var new_function = function name(){};"中用 javascript 定义函数名有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7691533/

相关文章:

javascript - 为什么在 Jquery 中 "on click"只更新一次?然后第二次在 $(this) 上显示 "undefined"?

javascript - 我在我的 Node.js 应用程序中使用 MongoSkin,在一段时间不活动后,它失去了与数据库的连接

javascript - 鼠标悬停时不显示 Dojox 工具提示

javascript - 如何将数组传递给java servlet

javascript - $translateProvider.useStaticFilesLoader 的 Angular Translate 异步计时问题

javascript - 如何在javascript或jquery中获取td的值?

javascript - Node.js 中的 fs readFile 代码不知何故崩溃了

javascript - 使用 jquery 或 js 在实时聊天中生成底部滚动条

javascript - 如何在 If 条件中使用多个 true 语句?

javascript - 我可以在 JavaScript 数组中发布图像吗