84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
var dd=function() { alert("hello, world."); } (); // 可以弹出
var nextId = function() { var id = 1 return function() { return id++ } }();
我的意思是:如何通过表达式来直接调用这个函数?上面那个,直接在表达式后面价格括号就可以调用,为什么这个不可以呢?这个如要怎么像上面那个那样,直接在表达式上调用?
这里不太懂,正在研究,希望懂的前辈给解释下~
感谢
光阴似箭催人老,日月如移越少年。
var dd = function() { alert("hello, world."); } ();
function() {}定义了一个函数,在后面加上括号会立即执行,不过一般为了好看,都会写成
function() {}
(function() { alert("hello, world."); })();
因为这个函数没有返回值,所以dd的值是undefined。其实要不要前面的var dd =都会执行。
dd
undefined
var dd =
var nextId = function() { var id = 1; return function() { return id++; }; } ();
这里定义了内外两个function,其中外面的function的执行结果是定义内部的function并返回出来,也就是说,执行的结果是一个function。
function
所以这一段执行之后nextId就是一个函数,
nextId
typeof nextId === "function"; // true
这个时候,如果执行nextId()会得到依次递增的 ID 值。
nextId()
如果你执行nextId.toString()可以看到nextId的定义,也就是上面定义在内部的那个函数
nextId.toString()
nextId.toString(); // "function () { return id++; }"
至于undefined,console自动输出上一条输入内容的计算结果。但var开头的代码不是表达式,而是语句,没有返回值,故输出undefined。
console
var
var nextId = function() { var id = 1 return function() { return id++ } }()();
写代码的时候尽量把缩进和换行弄好看点,你这代码整个2行,对应关系看着烦。
第二段是没有问题的,是因为你这里有2个函数,所以在后面加上两个括号就行了。
var nextId = function() { var id = 1; return function() { return id++ } }()();
第一段代码执行了,是因为函数里面alert()语句,所以题主可以看到直观的效果;
第二段代码其实也执行了,是因为题主没有看到直观的效果,所以认为没有执行。为什么没有直观的效果呢?因为第二段代码里,函数执行的是return。也就是说,函数执行了,然后把值赋给了变量。到这里就结束了。
题主可以在第二段代码后面加上一行打印输出代码,console.log( nextId ); 这样就可以看到效果了。
第一段
function() {}
定义了一个函数,在后面加上括号会立即执行,不过一般为了好看,都会写成因为这个函数没有返回值,所以
dd
的值是undefined
。其实要不要前面的var dd =
都会执行。第二段
这里定义了内外两个
function
,其中外面的function
的执行结果是定义内部的function
并返回出来,也就是说,执行的结果是一个function
。所以这一段执行之后
nextId
就是一个函数,这个时候,如果执行
nextId()
会得到依次递增的 ID 值。如果你执行
nextId.toString()
可以看到nextId
的定义,也就是上面定义在内部的那个函数第一句没有报错,第二句也没有报错,我不知道你的结论是怎么得出来的
至于
undefined
,console
自动输出上一条输入内容的计算结果。但var
开头的代码不是表达式,而是语句,没有返回值,故输出undefined
。写代码的时候尽量把缩进和换行弄好看点,你这代码整个2行,对应关系看着烦。
第二段是没有问题的,是因为你这里有2个函数,所以在后面加上两个括号就行了。
第一段代码执行了,是因为函数里面alert()语句,所以题主可以看到直观的效果;
第二段代码其实也执行了,是因为题主没有看到直观的效果,所以认为没有执行。为什么没有直观的效果呢?因为第二段代码里,函数执行的是return。也就是说,函数执行了,然后把值赋给了变量。到这里就结束了。
题主可以在第二段代码后面加上一行打印输出代码,console.log( nextId ); 这样就可以看到效果了。