1

一个简单的问题。

我有一个包含多个 JavaScript 的 Web 项目。

JS:

// (1) Event

$('.input').keyup(function()
{
    keyUpFunction();    
});


// (2) Function

function keyUpFunction(){ ... }

(1),(2) 哪个应该在一个 javascript 文件中排在第一位?如果浏览器先读取函数,它是否将函数存储在内存中并在扫描事件时调用它。

在某些情况下,在 multi javascript 中定义了相同的函数。例如

prm.add_endRequest(function() {
    fn1();
    fn2();
});

$(document).ready(.......)

我是否应该复制函数名称并在每个 js 文件中定义每个组件。还是将函数声明在一个文件中并调用复合函数的子函数?

4

2 回答 2

2

函数定义如下:

function fooBar(){}

被“提升”到当前范围的顶部。这意味着它们在当前范围内将始终可用,即使它们是在文件末尾定义的。

如果你定义了这样的函数,这不成立:

 var fooBar = function(){};

这些函数不会被提升,必须先定义才能使用。

应该注意的是,在您的具体示例中,keyUpFunction只有在触发 keyup 事件后才会调用。这也意味着您页面上的所有 javascript 都将被评估,因此无论如何都会定义(解析)keyUpFunction。

编辑:更明确地说,这第一个例子是好的:

doSomething('hello world');
function doSomething(str){ 
   console.log(str);
} 

但是,这会给您带来问题:

doSomething('hello world');
var doSomething = function(str){ 
   console.log(str);
} 
于 2012-04-20T16:49:37.403 回答
1

@Matt 的回答很好地涵盖了提升功能的东西。

为避免多个文件中的函数名称冲突,请将您的内容包装在立即调用的函数表达式中,例如:

(function() {
     // put your variables functions here
     ...

     // register event handlers
})();

其中声明的任何变量或函数都将被限制在该范围内。

于 2012-04-20T16:53:34.257 回答