关于js函数表达式的问题

nba 发布于 2015/07/12 20:23
阅读 270
收藏 0
var aaa =( function()
{

var bbb = function(){

};



}
)();
当在页面加载这个函数表达式时,为什么bbb函数表达式没有执行呢??
加载中
0
开源小姐
开源小姐

(function(){alert(111)})();
(function(){alert(222)}());
void function(){alert(333)}();
~function (){alert(444)}()
+function (){alert(555)}()
-function (){alert(666)}()

都可以让匿名函数执行

开源小姐
开源小姐
回复 @小姐_开源不 : 你上面的代码是,bbb直接等于function (){}, 你调用bbb的时候是bbb加括号bbb(), 你要调用匿名函数function (){}同理也好在后面加()
开源小姐
开源小姐
你还没了解什么是匿名函数。var bbb = function (){} 只是把后面的函数结构不是结果赋给bbb。 在匿名函数后面加括号就可以先执行匿名函数,然后把结果赋值给bbb
nba
nba
我问的是这个函数表达式里的bbb函数表达式为什么没有执行??
0
干煸小黄鱼儿
干煸小黄鱼儿
这里只是给bbb赋值一个函数,并没有执行吧
干煸小黄鱼儿
干煸小黄鱼儿
回复 @nba : 执行结束之后,$aaa=function(a){alert(a)};所以调用时会弹出10;直接(function(){return ...})(10);这里的10根本没用啊
nba
nba
先谢谢回答,是正确的 我再问一个类似的问题 var $aaa = (function() { return function(a){ alert(a); } } )(); $aaa(10); 这样的一段在执行时,如果在第一个分号前的括号中写上10,为什么不会弹出10,而$aaa(10);这样写会弹出10呢??
0
当C罗爱上梅西
当C罗爱上梅西
只是定义了bbb函数,没有调用是不会执行的。
0
开源wolf

没有调用怎么执行


0
火龙战士
火龙战士
你这里只是做了一个简单的定义,却没有调用。怎么又能执行呢
0
nba
nba
谢谢诸位,我懂了
0
KaronChen
KaronChen
楼主你这个问题懂了,我还可以回答吗
nba
nba
可以的
0
KaronChen
KaronChen

这里有3个知识点:

1,执行上下文中有个东西叫变量对象,保存着函数的形参、函数声明和声明的变量。其中有个点就是var显示声明的变量在代码执行前被包含到变量对象中,并赋予undefined才能在声明前面使用执行代码才对其进行填充值。

2,函数表达式不影响变量对象(函数表达式不是以function开头的,所以在变量对象中是找不到的)如:


所以bbb在函数内部值为undefined,只有等执行了调用了bbb才会有值:(但要是aaa所对应的函数体没有立即调用,bbb是不会创建的):


3,函数只要在表达式位置,不加()也行,也就是说:var aaa =( function(){} )(); 和 var aaa = function(){}(); 是一样的


返回顶部
顶部