下面给出的JavaScript代码片段是函数声明吗?如果不是,是否可以有人概述一下它们是什么?
some_func = function(value) {
// some code here
}
和
show:function(value){
// some code here
}
下面给出的JavaScript代码片段是函数声明吗?如果不是,是否可以有人概述一下它们是什么?
some_func = function(value) {
// some code here
}
和
show:function(value){
// some code here
}
有六种方法/上下文可以创建函数:
1)标准声明符号方法(对于具有 C 背景的人最为熟悉)
function foo() {}
其余的都是函数表达式:
2)作为对象字面量中的一个方法
var obj = {
foo: function() {}
};
3)作为已实例化对象的方法(每次执行new
时创建)
var Obj = function() {
this.foo = function() {};
};
4) 作为原型的方法(只创建一次,无论执行多少次new
)
var Obj = function() {};
Obj.prototype.foo = function() {};
5) 作为带有引用的匿名函数(与#1具有相同的效果)*
var foo = function() {};
6) 作为立即执行的匿名函数(完全匿名)
(function() {})();
* 当我看到这个语句时,我考虑的是结果。因此,我不认为它们是匿名的,因为对于函数立即创建了一个引用,因此不再是匿名的。但对大多数人来说,这都是相同的。
some_func
。因此,使用some_func()
将调用该函数。var obj = {
show:function(value){
// some code here
}
};
因此,obj.show()将调用该函数
在这两种情况下,您都创建了一个匿名函数。但是在第一种情况下,您只是将其分配给变量。而在第二种情况下,您将其分配为对象的成员(可能是许多其他成员之一)。
obj
上的外层括号是多余的。 - Justin Johnsoneval("({a:1})")
这样评估一个对象时才会出现这种情况。 - YOU(function() {})()
是一个自执行的函数表达式;括号()
将function(){}
括起来以转换为函数表达式是必要的。否则它被视为函数声明,缺少标识符(或者如果提供标识符,则其后面的()
)将导致语法错误。 - NickFitz首先是分配匿名函数的本地(或全局)变量。
var some_name = function(val) {};
some_name(42);
var obj = {
show: function(val) {},
// ...
};
obj.show(42);
在JavaScript中,函数是一等公民,因此您可以将它们分配给变量,并从变量调用这些函数。
您甚至可以使用与要分配给的函数不同的其他名称声明函数。当您想定义递归方法时,这非常方便。例如,不要写成这样:
var obj = {
show: function(val) {
if (val > 0) { this.show(val-1); }
print(val);
}
};
你可以编写:
var obj = {
show: function f(val) {
if (val > 0) { f(val-1); }
print(val);
}
};
var some_func = function(value) {
// some code here
}
另一种方式:
function some_funct() {
}
另一种方法:
var some_object={};
some_object["some_func"] = function() {};
或者:
var some_object={};
some_object.some_func = function() {};
some_object["some_func"] = function() {};
这种方式有些繁琐。使用点符号表示法更加简洁:some_object.some_func = function() {};
- Justin Johnsonsome_func
,并将函数分配给它,以便可以调用some_func()
。show
属性的值:var myObj = {
propString: "abc",
propFunction: function() { alert('test'); }
};
myObj.propFunction();
some_obj = { init: function() {}, show: function() {} };
- MBO它们被称为匿名函数;您可以在此处了解更多信息:
http://www.ejball.com/EdAtWork/2005/03/28/JavaScriptAnonymousFunctions.aspx
第一个...
some_func = function(value) {
// some code here
}
声明一个变量并将匿名函数分配给它,相当于...
function some_func (value) {
// some code here
}
第二个应该长成这样...
obj = {
show:function(value){
// some code here
}
}
// obj.show(value)
与...等效
//pseudo code
class MyClass {
function show (value) {
// some code here
}
}
obj = new MyClass(); // obj.show(value)
干杯
var Obj = function() { this.show = function() {}; }
等同于你的伪代码。 - Justin Johnsonobj={show:function(value){alert("work");}} obj.show();
- Ei Maungobj.show()
不起作用,我是说你的例子不等价。 - Justin Johnson