我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.
以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.
这两种方式是:
var functionOne = function() {
// Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?
是否有JavaScript document.getElementById的简写?或者我有什么方法可以定义一个?而越发重复重复输入了和超过.
如果我将它们放在document.ready()函数中,函数将显示为undefined:
$(document).ready(function(){
function foo()
{
alert('Bar');
}
});
foo(); // Undefined
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我确定我只是需要一些简单的理解:)
为什么这个:
(function () {
//code
}());
Run Code Online (Sandbox Code Playgroud)
还有这个:
var f = function () {
//code
}();
Run Code Online (Sandbox Code Playgroud)
工作,而这:
function () {
//code
}();
Run Code Online (Sandbox Code Playgroud)
才不是?它看起来完全一样 - 定义了匿名函数,并立即调用.有人可以从JavaScript/ECMAScript标准中引用它来解释这个吗?
更新:感谢大家的答案!所以这是关于函数表达式与函数声明的关系.请参阅此Stack Overflow答案,ECMAScript标准第13节,以及这篇精彩文章:命名函数表达式揭秘.
回顾一下答案:
第一个片段被解释为表达式,因为应用了分组运算符()- 请参阅ECMAScript标准第11.1.6节.
在第二个片段中,函数被解释为表达式,因为它位于赋值运算符的右侧部分=.
第三个片段没有任何允许解释器将函数作为表达式读取的东西,因此它被认为是一个声明,如果没有标识符则无效(Gecko允许它通过,但它会跟随下面的()分组操作符(因为它认为) )什么都不适用).
可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
在JavaScript中声明函数
我已经看到了两种不同的语法来定义javascript中的函数:
function f() {
...
}
Run Code Online (Sandbox Code Playgroud)
以及
var f = function() {
...
};
Run Code Online (Sandbox Code Playgroud)
这些有什么区别?其中一个被弃用了吗?
我目前正在学习JavaScript,我不太明白何时将函数写入变量.
例如,以下两个代码块在Node.js中执行完全相同的操作:
var onReq = function(req, res) {
res.write('Hello');
};
http.createServer(onReq).listen(3000);
Run Code Online (Sandbox Code Playgroud)
和
function onReq(req, res) {
res.write('Hello');
}
http.createServer(onReq).listen(3000);
Run Code Online (Sandbox Code Playgroud)
根据最佳实践,哪种方法最好?为什么?
关于JS,这两者有什么区别?我知道方法与对象有关,但是混淆了函数的用途是什么?它们的语法有何不同?
另外,这两种语法之间的区别是什么:
var myFirstFunc = function(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
和
function myFirstFunc(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
另外,在使用函数之前,我在某处看到了我们需要做的事情:
obj.myFirstFunc = myFirstFunc;
obj.myFirstFunc("param");
Run Code Online (Sandbox Code Playgroud)
为什么需要第一行,它有什么作用?
对不起,如果这些是基本问题,但我开始使用JS而且很困惑.
编辑:对于最后一点代码,这就是我所说的:
// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
this.age = newAge;
};
// now we make bob
var bob = new Object();
bob.age = 30;
// and down here we just use the method we already made
bob.setAge = setAge;
Run Code Online (Sandbox Code Playgroud) 可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
Javascript中的函数表达式与声明有什么区别?
我知道函数声明和表达式之间的区别,但是遇到了涉及函数名称的代码,并且想要了解运行它时会发生什么:
var abc = function def() {
console.log("Wait! What??");
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是JavaScript的一种方式,但只是想知道一些事情:
abc?为什么会这样?abc可以叫但不是def,为什么?def是undefined- 为什么?如果它应该是,是否有内存泄漏?abc.prototype功能def?谢谢
我理解JavaScript是解释的而不是编译的.没问题.但是,我在这里继续阅读,JavaScript是"即时"执行的,并且每行读取一行.对于以下示例,这个想法让我感到困惑:
writeToConsole();
function writeToConsole() {
console.log("This line was reached.");
}
Run Code Online (Sandbox Code Playgroud)
为了记录,这段代码将写入控制台就好了.仍然,浏览器如何知道exampleFunction()它是否尚未到达函数的存在?
换句话说,什么时候首先解释这个函数?
我已经看到最近的代码示例将函数放在变量中,然后像普通函数一样调用函数.
如:
var myFunctionName = function() {
Code Here...
}
myFunctionName();
Run Code Online (Sandbox Code Playgroud)
我相信更先进的场景有很多优点,但我只是好奇.