新足迹

 找回密码
 注册

精华好帖回顾

· 更新啦~挡雨板挡泥板到了!宝宝也长大了!途锐入手快2月了,发些图片外加一些改装。 (2013-8-26) popxiaoyu · 关于低年级小朋友的Reading Levels (2010-6-7) 旋木
· 你也能做的肉松海绵卷---附26张图详细过程 (2011-6-18) rongerchen · 专开一帖说农场,欢迎灌水 (2018-1-21) 村西大树
Advertisement
Advertisement
查看: 2918|回复: 34

javascript question [复制链接]

退役斑竹

发表于 2010-11-12 16:35 |显示全部楼层
此文章由 阿Ka 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 阿Ka 所有!转贴必须注明作者、出处和本声明,并保持内容完整
(function () {
        //some code
} ())

any of you'v seen this before? why its written in that way?
Advertisement
Advertisement

2010年度奖章获得者

发表于 2010-11-12 16:38 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
jquery man

发表于 2010-11-12 16:45 |显示全部楼层
此文章由 orange0328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 orange0328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
是jQuery吧~~~
jQuery有很多简化写法。

退役斑竹

发表于 2010-11-12 16:51 |显示全部楼层
此文章由 阿Ka 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 阿Ka 所有!转贴必须注明作者、出处和本声明,并保持内容完整
i believe its javascript, its from facebook javascript SDK

facebook uses jquery? no i reckon:o

发表于 2010-11-12 16:56 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
例如 回调函数
callback 都是这么写的
里面是个 匿名函数

jquery 大量的用了这种写法

但是 和jquery 没啥关系

楼下的 实际上就是 json的 一种应用

[ 本帖最后由 o2h2o 于 2010-11-12 16:59 编辑 ]

评分

参与人数 1积分 +5 收起 理由
阿Ka + 5 谢谢奉献

查看全部评分

发表于 2010-11-12 16:58 |显示全部楼层
此文章由 pengruijun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pengruijun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个是用来创建一个javascript object.
//some code 里应该还有具体的function 的定义,比如
Oursteps = {
init: function() {
},
load: function() {
}
}

这样你就可以在你的javascript code 里直接call
oursteps.init()
or
oursteps.load()

评分

参与人数 1积分 +5 收起 理由
阿Ka + 5 谢谢奉献

查看全部评分

Advertisement
Advertisement

2007 年度奖章获得者

发表于 2010-11-12 17:02 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
javascript anonymous functions

anonymous functions can be used to pass to another function as a parameter

评分

参与人数 1积分 +5 收起 理由
阿Ka + 5 谢谢奉献

查看全部评分

退役斑竹

发表于 2010-11-12 17:03 |显示全部楼层
此文章由 阿Ka 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 阿Ka 所有!转贴必须注明作者、出处和本声明,并保持内容完整
创建object,直接 = {}就得了
我不理解的事为啥它外面一个(),function后来还一个()

发表于 2010-11-12 17:06 |显示全部楼层
此文章由 pengruijun 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pengruijun 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 阿Ka 于 2010-11-12 17:03 发表
创建object,直接 = {}就得了
我不理解的事为啥它外面一个(),function后来还一个()

匿名的 就是这格式

特殊贡献奖章

发表于 2010-11-12 17:06 |显示全部楼层

回复 8# 的帖子

此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
javascript博大精深
又发展了数十个门派的 framework,很难说那个语法是不对的,一般就照着它写吧

发表于 2010-11-12 17:17 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
javascript 真是一个 小人物奋斗史
从以前的 贱货 成为现在的 国王
谁都不敢轻视他了

如果 html 5 没有 javascript 也残废了

[ 本帖最后由 o2h2o 于 2010-11-12 17:22 编辑 ]
Advertisement
Advertisement

发表于 2010-11-12 22:53 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
刚看到这个帖子。

楼上说的都不对,这是self execution function,它自己就可以run,不用其他方式的invocation. 你看一下jquery的源码,这个结构在所有的东西最外面。


给你写两行:在console run一下

(function(){window.test="abc";}())

然后再在console type in: test  //output:“abc”

这是在window中加一个test的property,加jQuery和$是同样的道理,见jquery原代码的最后一个statement.

[ 本帖最后由 乱码 于 2010-11-12 23:13 编辑 ]

评分

参与人数 2积分 +13 收起 理由
阿Ka + 8 你太有才了
iami + 5 感谢分享

查看全部评分

发表于 2010-11-12 23:06 |显示全部楼层
此文章由 MaxChan 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 MaxChan 所有!转贴必须注明作者、出处和本声明,并保持内容完整
闭包?让本来没有private access的javascript具备一点封装性的写法。
至于是哪个framework首先发明这个写法的那就天知道了。

发表于 2010-11-12 23:11 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 MaxChan 于 2010-11-12 23:06 发表
闭包?让本来没有private access的javascript具备一点封装性的写法。
至于是哪个framework首先发明这个写法的那就天知道了。


应该是javascript的首创,function(){}可以看成expression,再加()就是invocation.

javascript很强大的地方就是可以把function expression作为var pass到其他的function中去,类似于其他语言的函数指针,但不完全一样。对framework的扩展极其有帮助。

发表于 2010-11-12 23:36 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2010-11-12 17:17 发表
javascript 真是一个 小人物奋斗史
从以前的 贱货 成为现在的 国王
谁都不敢轻视他了

如果 html 5 没有 javascript 也残废了


Brendan Eich(现在mozilla的cto)当年给netscape design javascript的时间不超过2个星期,能到这个水平已经相当不错了,比比那些我们从来就没听说过的语言,它能存活下来,完全是internet的功劳.
头像被屏蔽

禁止发言

发表于 2010-11-13 00:24 |显示全部楼层

why javaScript is called javaScript, not something-else-sript?

此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Advertisement
Advertisement

发表于 2010-11-13 00:38 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2010-11-12 22:53 发表
刚看到这个帖子。

楼上说的都不对,这是self execution function,它自己就可以run,不用其他方式的invocation. 你看一下jquery的源码,这个结构在所有的东西最外面。


给你写两行:在console run一下

(function(){window.t ...

还能在 console 上面run ?
这个还真的不知,
但是我实验了 好像不行
难道 console 也可以运行 javascript?

发表于 2010-11-13 00:48 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
找到一个 解释了


I have been working on JavaScript quite extensively since last few months and I found this self executing function really helpful. It’s unique in its own way and can actually help you a lot. A self executing function in JavaScript is the one which is invoked automatically as soon as it is defined. It’s an anonymous function and is usually used in conjunction to onload event.

Let me show you, how we define a self invoking or self executing function in JavaScript.

<script>
//Example 1
(function(){
   alert('I am being called');
})();

//Example 2
(function(x){
   alert(x);
})('I am passed as an argument');

</script>
As you can notice, in the above lines of code, we did not specify name to the function and that is why its called anonymous function. The function is wrapped inside the round brackets and is called as soon as its definition is completed. You can also pass the arguments, if need be, as show in the second example.

Where to use self executing function JavaScript?
It’s nice that you have learnt a new thing in JavaScript, but it is of no fun until you know its real use. So, to be very clear we use these kind of functions when we want variables with limited or local scope. Unclear ? Let’s take a scenario.

You created a nice shiny widget, eg. Twitter updates widget. In this widget, you have used extensive JavaScript functionality to pull new tweets and show some other information. Now this widget code can be embedded on various websites which already have their own JavaScript code. So how can you be sure that the function names which you have used is not being used on end-user’s website ? The variable names which you are using are not in use already ? So to get rid of these uncertainties we use this variant from anonymous functions family.

Hope this helps you to write some nice code. Doubts? I am just a comment away.

发表于 2010-11-13 00:52 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
好像时立即就执行了

那 不是不能在以后被调用了

发表于 2010-11-13 05:44 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 iami 于 2010-11-13 00:24 发表
why javaScript is called javaScript, not something-else-sript?

那时候Java火,它想借点知名度。

要是搁在现在可能会叫PythonScript了

发表于 2010-11-13 12:47 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 iami 于 2010-11-13 00:24 发表


看看它命名的历史。

http://www.irt.org/script/375.htm
http://stackoverflow.com/questio ... ing-to-do-with-java
Advertisement
Advertisement

发表于 2010-11-13 12:52 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2010-11-13 00:38 发表

还能在 console 上面run ?
这个还真的不知,
但是我实验了 好像不行
难道 console 也可以运行 javascript?


console在js debug的时候类似于vs中ctl+alt+i,你可以任意在commond window中change/exim variable的值。

console单独也可以run任何js statement.

发表于 2010-11-13 12:58 |显示全部楼层

回复 19# 的帖子

此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
以后无法调用了,就执行一次。

这种形式主要目的是避免global variable的pollution,很多developer如果想inject 一段立即执行的js到document中,一般直接写js statement了,这不是一个值得推荐的practice.

要用self execution function的方式来执行。

所有的framework都是用这种方式来做的。
头像被屏蔽

禁止发言

发表于 2010-11-13 13:07 |显示全部楼层

回复 21# 的帖子

此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
谢谢分享

发表于 2010-11-13 13:12 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
乱码绝对是个脚本大牛

发表于 2010-11-13 21:32 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kawara 于 2010-11-13 13:12 发表
乱码绝对是个脚本大牛


真的不是,我碰巧知道而已
Advertisement
Advertisement

发表于 2010-11-16 14:12 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
self execting function 的一种用法 (发现第一段代码的问题了吧)

Listing 3-19: A problematic piece of code in which the iterator is not maintained in the closure.
<div></div>
<div></div>
<script>
var div = document.getElementsByTagName("div");
for ( var i = 0; i < div.length; i++ ) {
div.addEventListener("click", function(){
alert( "div #" + i + " was clicked." );
}, false);
}
</script>
In Listing 3-19 we encounter a common issue with closures and looping, namely that the variable that's
being enclosed (i) is being updated after the function is bound. This means that every bound function
handler will always alert the last value stored in i (in this case, '2'). This is due to the fact that closures
only remember references to variables - not their actual values at the time at which they were called. This
is an important distinction and one that trips up a lot of people.
Not to fear, though, as we can combat this closure craziness with another closure, like in Listing 3-20.
Listing 3-20: Using an anonymous function wrapper to persist the iterator properly.
<div></div>
<div></div>
<script>
var div = document.getElementsByTagName("div");
for ( var i = 0; i < div.length; i++ ) (function(i){
div.addEventListener("click", function(){
alert( "div #" + i + " was clicked." );
}, false);
})(i);
</script>

发表于 2010-11-16 14:23 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2010-11-16 14:12 发表
self execting function 的一种用法 (发现第一段代码的问题了吧)

Listing 3-19: A problematic piece of code in which the iterator is not maintained in the closure.



var div = document.getElementsByTagNa ...


感觉是junior写的,还是有不少问题.
1. 整体上要用function wrap一下。
2. 那个self executing function 可以用anonymous call back function.
3. 也可以用apply,把context instance和parameters传进去。

发表于 2010-11-16 23:29 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
第一段代码不管 click 哪个div 显示的都是2

第二段才正确

发表于 2010-11-17 09:52 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本来以为很明白closure在memory的实现,这个例子把我弄糊涂了,找了半天也没找到self execting function和loop缠合起来对closure在内存指针方面的解释。把上面的第二段改了一下,有点小bug。

<div>test1</div>
<div>test2</div>
<script>
var div = document.getElementsByTagName("div");
for ( var i = 0; i < div.length; i++ ) (function(i){
div.addEventListener("click", function(){
alert( "div #" + i + " was clicked." );
}, false);
})(i);
</script>

这个link只给了例子,没给解释。

http://www.room51.co.uk/js/closures.html

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部