Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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_Semantics - Fatal编程技术网

Javascript 写作功能的语义意义

Javascript 写作功能的语义意义,javascript,semantics,Javascript,Semantics,我们可以用两种方式编写函数: var v1 = m1('hello'); // error var v2 = m2('hello'); // OK var m1 = function(param){ // ... return param; } function m2(param){ // ... return param; } var v1 = m1('hello'); // OK var v2 = m2('hello'); // OK 正如我所知

我们可以用两种方式编写函数:

var v1 = m1('hello'); // error
var v2 = m2('hello'); // OK

var m1 = function(param){ 
    // ... 
    return param; 
}

function m2(param){
    // ...
    return param;
}

var v1 = m1('hello'); // OK
var v2 = m2('hello'); // OK
正如我所知,只有一个区别-创作时间:
m2
在编译时使用,所以我们可以像我的例子一样使用“before”声明。
m1
在分配时间内(代码一行接一行),我们以前不能使用它

对于内存或性能来说,一个更有效吗?
在哪种情况下,一种方式更具语义,在哪种情况下,第二种方式更具语义?
这是下一个区别吗?
什么时候我们应该使用第一个,什么时候使用第二个

//编辑真正的原始性能测试-相同的结果
//var m1=函数(参数){ // ... 返回参数; }

<> P>当你认为函数是一个对象,而我们只是给这个对象分配一个名称时,它就更有意义了。把它想象成VarM1=[1,2,3];以这种方式声明的函数的内容也会被编译

当分配这样一个函数时,我们不局限于一个未命名的函数,我可以通过名称或变量引用该函数

有关更多信息,您必须查看本文


以下函数的名称为
m1
。它作为
m1
存储在当前作用域中。无论代码顺序如何,它都可以在该范围内的任何地方访问

function m1(){}
以下函数没有名称。它作为
m2
存储在当前作用域中。只能在其后面的行中访问它

var m2 = function(){}
还可以将命名函数指定给其他变量:

var m1 = m2;
function m2(){}
var m3 = function m4(){};
var m5 = function(){};
在Firefox的控制台中:

>>> m1
m2()

>>> m2
m2()

>>> m3
m4()

>>> m4
ReferenceError: m4 is not defined

>>> m5
function()

如果您只希望有一个可以通过特定名称访问的函数,那么最起码的方法是不赋值地编写。因为您不需要执行额外的操作和编写额外的代码,所以您只需要有一个可以调用的函数

您编写的赋值方法是使用匿名函数的示例,实际上并不需要匿名函数。此功能的一个示例用法是,您可以将操作作为参数传递给某些函数。看一看。此函数接受两个参数:动画的长度和动画完成后要执行的操作。您可能不需要在其他任何地方执行该操作,那么为什么要创建另一个标识符并使命名空间混乱呢?可能有原因,但这些都超出了这个问题的范围

JS语法两者都允许,但这是JS中匿名函数可用的副作用


因此,这是一个选择和习惯的问题。

尝试在jsperf上进行测试。JavaScript中没有“编译时间”!您可以使用函数声明创建
m2()
,因此它会被提升到父函数的顶部,或者在您的例子中是整个脚本的顶部。@ondrek:它们都创建了一个函数,因此执行相同的操作。对不起,我刚才没说。我的意思是创建一个jsperf来创建函数,而不是执行它们。出于个人偏好,我几乎总是使用第一种方法,这样我就可以将函数定义从高级排序到低级。