Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中函数文本的确切含义_Javascript_Literals_Function Literal - Fatal编程技术网

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"); } 函数文字只是定义未命名函数的表达式 函数文本的语法与函数语句的语法非常

在JavaScript中,有对象文字和函数文字

对象文字:

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告诉我您是否有比维基百科更可靠的通用或编程源。