资产javascript重复功能名称

时间:2014-03-04 21:52:07

标签: javascript ruby-on-rails-4

我是rails的新手,我还在尝试一些事情,到目前为止我已经阅读过关于RoR的资产管道不允许重复文件名,即app/stylesheet/style.css.scssvendor/stylesheet/style.css.scss只有第一个将有效,好吧,没有问题我可以处理,但是在java脚本中的函数名称怎么样,比方说我想调用jquery的淡入淡出函数但被调用的是bootstrap-jquery的淡入淡出效果,我假设他们两者都有相同的名称但行为不同......

文件[1] .js.coffee中的

我有

fadeEffect = function() {
   code segment[1]
};

另一方面我有文件[2] .js.coffee

fadeEffect = function() {
   code segment[2]
};

因此它们具有不同的文件名,但它们对于给定的函数具有相同的名称,如何调用第一个js文件或第二个文件中的一个?他们都来自供应商,更改名称不会是优雅的事情,所以我想知道是否有解决方案吗?

感谢阅读!

1 个答案:

答案 0 :(得分:2)

您不能在同一范围内拥有两个具有相同名称的功能,并且可以同时访问这两个功能。定义的最后一个(由浏览器解析javascript的顺序确定)是将生效的那个。

您需要包含这些定义的范围,以便它们不会相互冲突(例如,它们不是全局的,不在同一范围内),或者您必须更改其中一个定义的名称。

如果其中任何一个只在本地需要,你可以将代码括在一个IIFE(立即调用的函数表达式)中,它创建一个单独的局部作用域,这样你就可以在本地使用某些东西,但它没有在全局定义它可以与其他事情发生冲突。

// create new local function scope to isolate our variables so they dont
// overwrite other variables of the same name
(function() {

    // add var in front of the variable name to make it a local variable
    var fadeEffect = function() {
       code segment[2]
    }

    // use this copy of fadeEffect inside this function block
    // this other definition of fadeEffect will not be available here, but
    // this one won't override the other one outside this function scope


})();