
1 yesmeck 2013-08-03 03:03:46 +08:00 什是返回 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] ? |
2 AWSAM 2013-08-03 03:04:59 +08:00 via iPad 没学过js 不过看代码 你定义了一个函数然后赋值给数组中的元素 返回的当然是函数了啊 想返回999 应该 调用 而不是 定义 函数吧 |
3 bixuehujin 2013-08-03 03:06:16 +08:00 for 里面创建的函数在何处调用? 话说 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] 的结果怎么出来的呢? |
4 qiayue PRO 你再仔细一句一句看看代码,返回没错,你自己理解错了 |
5 bixuehujin 2013-08-03 03:08:37 +08:00 如何函数没有写错的话,结果正确无疑。 |
6 nervouna OP 是的,我自己理解错了,深夜脑子秀逗了。感谢楼上几位…… 正确的姿势是再调用一下返回数组里的某个项。 而且返回的数组里的函数,返回的值其实应当是 10 @yesmeck @AWSAM @bixuehujin @qiayue |
7 utom 2013-08-03 03:29:32 +08:00 function createFunctions(){ var newArray = []; for (var i=0; i<10; i++){ newArray[i] = function(){ return i; }(); } return newArray; } [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
8 coolicer 2013-08-03 10:59:55 +08:00 你把一个函数给一个数组,肯定全都是函数。 |
9 coolicer 2013-08-03 11:00:21 +08:00 JS讨论可以找我,我也是JS爱好者。 |
10 utom 2013-08-03 22:53:42 +08:00 newArray[i] = function(){ return i; }(); 后面括号立即执行~ |
11 linkgod 2013-08-03 23:20:00 +08:00 第一,就算如LZ所愿,也不会反回 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],应该是返回 [10, 10, 10, 10, 10, 10, 10, 10, 10, 10] 第二,回到js语言上来看,在执行到 ``` newArray[i] = function(){ return i; } ``` 这个函数并没有立即执行,应该是 ``` newArray[i] = (function(){ return i; })(); ``` 这样才对,就得到[0, 1, 2, 3, 4, 5, 6, , 8, 9] |
12 PotatoBrother 2013-08-04 10:52:10 +08:00 via iPhone 应该是楼主错了,不是程序错了 |
13 cave 2013-08-04 12:12:15 +08:00 为什么不是 [function (){return 0;}, function (){return 1;}, function (){return 2;}, function (){return 3;}, function (){return 4;}, ...] |
17 cave 2013-08-04 15:23:17 +08:00 说错了,是匿名函数里面没定义i |
18 viger 2013-08-05 16:41:11 +08:00 1, 首先楼主在赋值给数组元素的是一个函数对象,而不是函数的结果。所以你运行后打印出的结果肯定是函数体。 2,当你再次执行这些数组元素的函数对象时结果肯定是[10,10,10...10],为什么不是[9,9,9...9呢],其实这个要从Javascript这种语言的特性说起。简单的说是其变量作用域的问题。一般强类型语言变量i的作用域只在循环内部可访问。JS不是。你可以在console中执行for(var j =0;j<10;j++);console.log(j);结果显示的是10,而不是undefined. 3,楼上的朋友说在函数后面加上()即可马上执行函数,建议是(function(){})()这样写比较好;随便楼主可以google下JS闭包。 ,注意变量申明时一定要var一下。如果没有,JS默认此变量是全局变量。 @cave 匿名函数虽然没有定义i,但是JS的特性是该作用域内没有的自动从其父作用域中寻找变量。这个无需担心。当然有时候也会造成很多奇怪的错误,好的做法是即使var变量。 |
20 otakustay 2013-08-05 18:26:27 +08:00 为什么所有玩js的都喜欢主动去踩一下这个坑- - |
21 FrankFang128 2013-08-05 18:32:53 +08:00 这不是坑。 不理解的地方就应该多试试。 |
22 mrhooray 2013-08-06 12:55:18 +08:00 @viger 貌似大多数语言都有你说的这个js特性。。。感觉应该是js只有global scope和function的local scope,没有一般语言的lexical scope https://developer.mozilla.org/en-US/docs/Web/Javascript/Guide/Values,_variables,_and_literals#Variable_scope |