JavaScript中函数文本的确切含义
在JavaScript中,有对象文字和函数文字 对象文字:JavaScript中函数文本的确切含义,javascript,literals,function-literal,Javascript,Literals,Function Literal,在JavaScript中,有对象文字和函数文字 对象文字: myObject = {myprop:"myValue"} 函数文字: myFunction = function() { alert("hello world"); } 字面意思是什么?我们可以说Java有方法文本吗 public void myMethod() { System.out.println("are my literal"); } 函数文字只是定义未命名函数的表达式 函数文本的语法与函数语句的语法非常
myObject = {myprop:"myValue"}
函数文字:
myFunction = function() {
alert("hello world");
}
字面意思是什么?我们可以说Java有方法文本吗
public void myMethod() {
System.out.println("are my literal");
}
函数文字只是定义未命名函数的表达式 函数文本的语法与函数语句的语法非常相似,只是它被用作表达式而不是语句,并且不需要函数名
因此,当您给出方法名称时,它不能是方法文本。最大的区别在于如何/何时解析和使用它。 以你为例,
myFunction = function() {
alert("hello world");
}
您只能在代码到达后运行myFunction()
,因为您使用匿名函数声明了一个变量
如果你用另一种方式
function myFunction(){
alert("hello world");
}
此函数在编译时声明为,可以在范围内的任何时间使用
请参阅。不要将JavaScript与Java进行比较,它们的共同点与熊和鲸鱼差不多。Java是一种面向对象的编程语言,而JavaScript是一种函数式编程语言 函数语言带来了函数作为第一类对象的概念:函数可以分配给变量,可以作为参数传递,因为它们可以作为其他函数的返回值 对象文字是您动态和在线创建的对象。这同样适用于函数文本。但您给出的示例实际上类似于常规函数声明:
function foo()
{
alert('bar');
}
将移动到作用域的顶部,在此转换为:
当函数可以作为参数/返回值传递时,这是有意义的:
var processed = (function(someFunc)//<-- argument name
{
return function()
{
alert('I\'ll call some function in 2 seconds, get ready');
setTimeout(someFunc,2000);//<-- passes a reference to foo, as an argument to setTimeout
}
})(foo);//pass reference to function object foo here
var processed=(函数(someFunc)//附加模块:
JavaScript中的函数文字是函数表达式的同义词
与函数表达式类似,函数文字可以有一个可选的标识符(名称)
因此,如果我们说函数表达式/函数文字,它包括没有标识符的函数表达式/函数文字(也称为匿名函数),但也包括带有标识符的函数表达式/函数文字。即使在很多书中,函数表达式/函数文字被用作没有标识符的函数表达式/函数文字(匿名函数)的同义词
函数文字
使用函数文字创建函数对象:
//创建一个名为add的变量,并在其中存储一个函数//以
添加两个数字
函数文本有四个部分
第一部分是保留字函数
可选的第二部分是函数名
它的名称可以递归地调用自身。该名称也可以由
调试器和开发工具来识别函数。如果
函数没有指定名称,如前一个示例所示,它是
据说是匿名的
第三部分是函数的参数集,用
括号。括号内有一组零或多个参数
名称,用逗号分隔。这些名称将定义为变量
在函数中。与普通变量不同,不是
初始化为未定义,则它们将初始化为参数
在调用函数时提供
第四部分是一组用大括号括起来的语句
语句是函数的主体。当
函数被调用
函数文字可以出现在表达式可以出现的任何地方
出现
资料来源:道格拉斯·克罗克福德
这意味着:
myFunction = function () {
alert("hello world");
};
function() {alert("hello world")}
是函数表达式/函数文字,但也:
myFunction = function myFunction() {
alert("hello world");
};
是函数表达式/函数文字。在ECMA-262中未找到正式定义
但是根据我所学的PLs和许多其他PLs,文字是值的表达
这意味着:
myFunction = function () {
alert("hello world");
};
function() {alert("hello world")}
是文字,而:
function hello_world() {alert("hello world")}
不是。因为后者不仅表示值,而且表示引用
我对vsenol的答案投了赞成票,但现在我认为它是错的。函数文本
不是一个函数
,而是表示函数
值的东西
对于汇编语言程序员来说,它类似于存储在内存.text
区域中的代码块
然后人们会问什么是函数
在任何编程语言中,函数实际上是一个指针或对由函数文本
表示的函数值的引用
比如说,
public void myMethod() {
System.out.println("are my literal");
}
如果我们有myMethod
这是一种方法
{
System.out.println("are my literal");
}
那么这就是Java不支持的方法literal。如果函数在JavaScript中不是literal,那么它们总是必须有一个名称。在Java中,方法不是“literal”因为它们总是有一个名称。它们永远不能被动态定义、传递或传递到方法中。您还有字符串/null/boolean/regexp/numeric/array literal。嘿,sry,但我更喜欢根据其他资源而不是维基百科。@vsenol告诉我您是否有比维基百科更可靠的通用或编程源。