可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
在JavaScript中我们可以说:
function a() {};
Run Code Online (Sandbox Code Playgroud)
或者我们可以说
var a = function() {};
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释这些有何不同之处,如果有的话,更为可取的,在什么情况下每个人都会使用?
任何链接或外部阅读也将非常感激.
可能重复:
Javascript:var functionName = function(){} vs function functionName(){}
你会做什么的原因:
somename = function(param1, param2) { }
Run Code Online (Sandbox Code Playgroud)
而不是做:
function somename(param1, param2) { }
Run Code Online (Sandbox Code Playgroud) 可能的重复:
JavaScript: var functionName = function() {} vs function functionName() {}
Javascript 中的函数表达式与声明之间有什么区别?
我试图了解 javascript 的“最佳实践”。
此代码来自jqfundementals.com
// create a function that will greet a person,
// and assign the function to the `greet` variable
var greet = function( person, message ) {
var greeting = 'Hello, ' + person + '!';
log( greeting + ' ' + message );
};
greet( 'Jory', 'Welcome to JavaScript' );
greet( 'Rebecca', 'Thanks for joining us' );
Run Code Online (Sandbox Code Playgroud)
为什么我应该将函数分配给 greet 变量?
我的第一个冲动是这样写:
function …Run Code Online (Sandbox Code Playgroud) 根据Google JavaScript样式指南,函数声明不应在块中声明,因为它不是ECMAScript的一部分.但是,我并不完全清楚什么算作块.
具体来说,我有一个构造函数,我想在该构造函数的范围内定义一个函数.这是否算作一个块内的函数,因为它在一组{}内?如果是这样,这是否意味着每个函数声明必须是全局的?
一些好的衡量标准:
function Constructor() {
function Shout () { alert('THE BEST UX IS IN ALL CAPS.'); }
}
Run Code Online (Sandbox Code Playgroud)
function Constructor() {
var Shout = function () { alert('THE BEST UX IS IN ALL CAPS.'); };
}
Run Code Online (Sandbox Code Playgroud) 我正在关注John Resig的《 JS忍者的秘密》幻灯片,但发现了一些我不清楚的东西。以下代码定义了一个命名函数表达式:
var ninja = function myNinja(){
console.log(myNinja); // function myNinja() {...}
};
myNinja; // undefined
Run Code Online (Sandbox Code Playgroud)
如我所见,在当前作用域(假设它是全局范围)中,ninja是保存对命名函数的引用的变量myNinja。ninja变量在范围内是可以访问的-很明显,但是myNinja在范围内不可以访问(但是可以在其自己的函数中访问)。怎么来的?
如果我定义一个函数(不使用函数表达式,而是使用函数声明):
function Cheese() {
console.log(Cheese);
}
Run Code Online (Sandbox Code Playgroud)
那么就可以在当前范围内访问它。我知道这就像那样-但是有人可以解释为什么吗?
球队,
我在使用时收到语法错误function(){},但不是何时(function(){}),为什么?
我知道(function(){})仍然是宣言' (function(){})()'是表达方式.
但是为什么这个宣言不可能只是function(){}没有覆盖(... )?
<html>
<body>
<script>
function(){} //**Syntax error**
(function(){}) //Declaration
(function(){})() //Expression; so executed.
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 鉴于:
function MyCtor() {}
var myInstance = new MyCtor(); //myInstance.constructor ==== MyCtor
var MyCtor = function() {}
var myInstance = new MyCtor(); //myInstance.constructor ==== Function
Run Code Online (Sandbox Code Playgroud)
如果您使用前一种模式实例化一个对象,则构造函数“更有意义”。
这些方法中的一种是首选吗?在某些情况下,一个人更惯用吗?
我被告知你必须始终在JavaScript中声明函数.真的吗?它的优点是什么?
我通常将函数分配给变量:
var foo = function() {};
Run Code Online (Sandbox Code Playgroud)
但据说这是错误的,需要做一些堆栈跟踪.有人可以解释一下吗?有人告诉我这样做:
var foo = function fooBar() {};
Run Code Online (Sandbox Code Playgroud)
如果它被分配给一个对象会有意义吗?
var Foo = {};
Foo.Bar = function Bar() {};
Run Code Online (Sandbox Code Playgroud)
请注意,这些功能不在全局范围内,也不是自行执行,也不是多次使用.
在Javascript中,声明函数的一种标准方法如下:
var add = function(a,b){
return a+b;
};
Run Code Online (Sandbox Code Playgroud)
但是,当我在语法的右侧重复函数名称时,我也没有错误.
var add = function add(a,b){
return a+b;
};
Run Code Online (Sandbox Code Playgroud)
第二种情况发生了什么?
在Udacity课程中,函数表达式和声明之间的区别解释如下:
函数声明定义函数,不需要为其分配变量.它只是声明一个函数,并且本身不返回值......另一方面,函数表达式确实返回一个值.
这令人困惑; 据我所知,当函数表达式和函数声明都包含return语句时,都返回一个值.
如果我理解正确,返回值的差异在于函数表达式中,如果在函数的第一次调用中更改了值,则在后续调用中将保留更新的值 - 而如果函数未存储在变量中,当函数执行完毕时,将删除返回值.我错过了什么,并且从课程中的陈述准确吗?
注意:我的问题与标记为重复的问题不同.在那个问题中,它询问使用一个在另一个之上的原因是什么,但问题中没有提到或在答案中解释了返回值.