`
my249645546
  • 浏览: 424807 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

看了这个才发现jQuery源代码不是那么晦涩

阅读更多
32
4
分享到:
评论
25 楼 fhtwins 2014-05-06  
竹林闲人 写道
my249645546 写道
竹林闲人 写道
LZ能否推荐下这方面的参考资料那~~,谢谢

如果你想系统学习javascript的语言核心知识,那就看看《JavaScript权威指南》吧,讲得非常详细。
http://product.dangdang.com/product.aspx?product_id=22722790

非常感谢啊,我看了一些,真的很详细,LZ在软件园么?




?????
24 楼 fhtwins 2014-05-06  
引用
这里“ (value=nameInput.val(),value=="king")”中"()"将里面的表达式作为一个整体进行运算,而里面的表达式又是由","构成的多个表达式组,所以执行的时候会把这多个表达式都执行一次,并且返回最后一个表达式的值!
所以 (value=nameInput.val(),value=="king")执行时,先运算value的值,再判断是否为"king"。如果为king,会执行(nameErrorTip.hide(),"对了,输入为king!")。这个表达式又先将nameErrorTip隐藏,再返回一个"对了,输入为king!"字符串作为 整个return的值。


不错!
23 楼 CaptainKaren 2014-04-16  
学习了,讲的浅显易懂,非常感谢
22 楼 竹林闲人 2012-11-29  
my249645546 写道
竹林闲人 写道
LZ能否推荐下这方面的参考资料那~~,谢谢

如果你想系统学习javascript的语言核心知识,那就看看《JavaScript权威指南》吧,讲得非常详细。
http://product.dangdang.com/product.aspx?product_id=22722790

非常感谢啊,我看了一些,真的很详细,LZ在软件园么?
21 楼 my249645546 2012-11-07  
竹林闲人 写道
LZ能否推荐下这方面的参考资料那~~,谢谢

如果你想系统学习javascript的语言核心知识,那就看看《JavaScript权威指南》吧,讲得非常详细。
http://product.dangdang.com/product.aspx?product_id=22722790
20 楼 竹林闲人 2012-11-06  
LZ能否推荐下这方面的参考资料那~~,谢谢
19 楼 elan1986 2012-11-06  
18 楼 mfkvfn 2012-11-06  
    var showName=function(){  
        var value,nameInput=$("#nameHide");  
        return nameInput.show(),value=nameInput.val();  
    }; 

写成
    var showName=function(){   
        return $("#nameHide").show().val();  
    }; 

就就行了。搞那么复杂干嘛
17 楼 artair 2012-11-06  
my249645546 写道
sswh 写道
return (nameInput.length&&nameInput.val()&&nameErrorTip.length&&msg)||"没有找到name输入框或者输入框没有值!"; 

~~~~~~~~~~~~~~~~~
这种写法除了炫耀作用外,没有一点价值,而且也是混乱的来源。

其实我也是反对在实际应用中采用这种写法的,因为会对初学者造成阅读障碍。我写这篇文章的目的不是为了让大家以后就这样用,而是告诉大家可以这样用,在一些开源代码中遇到了能看懂。


编译语言和解释语言有很大的差别,尽量减少行数,会提高执行效率,(尤其在以前)。对于许多老一代程序员来说,牺牲可读性,增加效率是很重要的,毕竟程序还仅运行在486,586上
16 楼 artair 2012-11-06  
第一个解释起来非常的简单。
只要明白了,匿名函数,函数的执行。就够了!!!

分解出来就是

function niming = readydo() {...}; //定义一个函数

niming(); //执行它

如果把上面转成匿名函数方式:

先直接替换niming:

     readydo(){}();

看不清楚,那就加个括号吧

    (readydo(){})();

再把readydo变成匿名函数

    (function(){})();

ok!
15 楼 surpass 2012-11-06  
楼主写的不错
(function(){}){}
js模块化管理的开始。
14 楼 my249645546 2012-11-06  
sswh 写道
return (nameInput.length&&nameInput.val()&&nameErrorTip.length&&msg)||"没有找到name输入框或者输入框没有值!"; 

~~~~~~~~~~~~~~~~~
这种写法除了炫耀作用外,没有一点价值,而且也是混乱的来源。

其实我也是反对在实际应用中采用这种写法的,因为会对初学者造成阅读障碍。我写这篇文章的目的不是为了让大家以后就这样用,而是告诉大家可以这样用,在一些开源代码中遇到了能看懂。
13 楼 my249645546 2012-11-06  
sswh 写道
if(a){ 
    b 
}else{ 
    c 

//等价于 
(a&&(b))||c 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这两种写法是不等价的。 当a为true,b为false的时候,c一个会执行一个不会执行。
说实话,这种js的写法就是混乱的根源。完全是一种糟糕的代码风格。

你是对的 呵呵
12 楼 sswh 2012-11-06  
那么上面的(function(){})()中左侧定义function的()也是这个作用,将这个function给包裹起来,然后返回这个function。我们调用方法一般是a();那么(function(){})的作用就是返回这个function对象,然后(function(){})()右侧的()表示调用这个function。

~~~~~~~~~~~~~~~~~~
这个没有说清楚为什么需要在function前后添加括号的原因。
事实上是因为JS规范中表达式不能以function开头导致的。
类似的写法还有 +function(){}()    (function(){}())  也是可以的。

另外,如果目的是返回一个function,完全可以不使用括号。
var a = function(){return 22;}();
alert(a);
这个完全是可以的。
11 楼 sswh 2012-11-06  
return (nameInput.length&&nameInput.val()&&nameErrorTip.length&&msg)||"没有找到name输入框或者输入框没有值!"; 

~~~~~~~~~~~~~~~~~
这种写法除了炫耀作用外,没有一点价值,而且也是混乱的来源。
10 楼 sswh 2012-11-06  
if(a){ 
    b 
}else{ 
    c 

//等价于 
(a&&(b))||c 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这两种写法是不等价的。 当a为true,b为false的时候,c一个会执行一个不会执行。
说实话,这种js的写法就是混乱的根源。完全是一种糟糕的代码风格。
9 楼 jxfsuda 2012-11-06  
我现在的项目里面全部用 (fucntion(){})(); 这样的方式.省心
8 楼 crud0906 2012-11-05  
好文章,收藏
7 楼 my249645546 2012-11-05  
x87628 写道
有个疑问

最后的实例中,有这样的代码:
nameInput.length&&nameInput.val()&&nameErrorTip.length&&msg

如果nameInput.length为假值,会继续运算nameInput.val(),nameErrorTip.length以及msg么

不会。举个例子吧:
有语句
var result=nameInput.length&&nameInput.val()&&nameErrorTip.length&&msg;
如果nameInput.length等于0,为假值,几个表达式都是&&连接,那么一个为假值整个表达式都为假值,不需要再运算其他的表达式了。这时候result=0

var result=(nameInput.length&&nameInput.val()&&nameErrorTip.length)||"nameInput不存在";
如果nameInput.length等于0,为假值使得nameInput.length&&nameInput.val()&&nameErrorTip.length为假值;最后||了一个真值,所以最终结果为真值result="nameInput不存在

你可以自己写一个简单的 脚本测试一下
6 楼 x87628 2012-11-05  
有个疑问

最后的实例中,有这样的代码:
nameInput.length&&nameInput.val()&&nameErrorTip.length&&msg

如果nameInput.length为假值,会继续运算nameInput.val(),nameErrorTip.length以及msg么

相关推荐

Global site tag (gtag.js) - Google Analytics