javascript - 关于表达式调用函数的问题
大家讲道理
大家讲道理 2017-04-11 12:08:11
0
4
498
var dd=function() { 
alert("hello, world."); 
} (); // 可以弹出
var nextId = function() { var id = 1 
return function() { return id++ } }();

我的意思是:如何通过表达式来直接调用这个函数?
上面那个,直接在表达式后面价格括号就可以调用,为什么这个不可以呢?这个如要怎么像上面那个那样,直接在表达式上调用?

这里不太懂,正在研究,希望懂的前辈给解释下~

感谢

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
巴扎黑

第一段

var dd = function() {
    alert("hello, world.");
} ();

function() {} 定义了一个函数,在后面加上括号会立即执行,不过一般为了好看,都会写成

(function() {
    alert("hello, world.");
})();

因为这个函数没有返回值,所以 dd 的值是 undefined。其实要不要前面的 var dd = 都会执行。

第二段

var nextId = function() {
    var id = 1;
    return function() { return id++; };
} ();

这里定义了内外两个 function,其中外面的 function 的执行结果是定义内部的 function 并返回出来,也就是说,执行的结果是一个 function

所以这一段执行之后 nextId 就是一个函数,

typeof nextId === "function";
// true

这个时候,如果执行 nextId() 会得到依次递增的 ID 值。

如果你执行 nextId.toString() 可以看到 nextId 的定义,也就是上面定义在内部的那个函数

nextId.toString();
// "function () { return id++; }"
伊谢尔伦

第一句没有报错,第二句也没有报错,我不知道你的结论是怎么得出来的

至于 undefinedconsole 自动输出上一条输入内容的计算结果。但 var 开头的代码不是表达式,而是语句,没有返回值,故输出 undefined

var nextId = function() { 
    var id = 1 
    return function() { return id++ } 
}()();
Peter_Zhu

写代码的时候尽量把缩进和换行弄好看点,你这代码整个2行,对应关系看着烦。

第二段是没有问题的,是因为你这里有2个函数,所以在后面加上两个括号就行了。

var nextId = function() {
    var id = 1;
    return function() {
        return id++
    }
}()();
Peter_Zhu
  1. 第一段代码执行了,是因为函数里面alert()语句,所以题主可以看到直观的效果;

  2. 第二段代码其实也执行了,是因为题主没有看到直观的效果,所以认为没有执行。为什么没有直观的效果呢?因为第二段代码里,函数执行的是return。也就是说,函数执行了,然后把值赋给了变量。到这里就结束了。

  3. 题主可以在第二段代码后面加上一行打印输出代码,console.log( nextId ); 这样就可以看到效果了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!