Jquery知识点

块级作用域:

(function(参数){
})(参数值);

相当于:

function func(参数){
}
func(参数值);

 

(function ($) {....})();  这是闭包的写法,里面跟个匿名函数,有自调用的特征。

//*************闭包阶乘*************
var a = (function(n){

if(n<1){ alert("invalid arguments");
return 0;

}
if(n==1)

    { return 1; }

else

    { return n * arguments.callee(n-1); } }

)(4);
document.writeln(a);
()()这个形式:第一个括号里是一个函数,第二个括号里的数据则为函数的参数。

(function ($) {

.....
var textarea = $('content');
.....

}) (function (id) {return document.getElementById(id);})
第二个函数的返回值做为函数一参数


$(function(){})和$(document).ready(function(){...})

(function ($) { .... }) 其中$是参数,这是匿名函数
function($),$很明显是参数,传的$代表Jquery对象

document.ready和onload的区别——JavaScript文档加载完成事件(两种):

一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)
二是onload,指示页面包含图片等文件在内的所有元素都加载完成。

$(function(){
      ………………
});
其实这个就是jq ready()的简写,他等价于:

$(document).ready(function(){
      ………………
});

或者下面这个方法,jQuer的默认参数是:“document”;
$().ready(function(){
      ………………
});

一个页面响应加载的顺序是:域名解析-加载html-加载js和css-加载图片等其他信息。
那么Ready应该在“加载js和css”和“加载图片等其他信息”之间,就可以操作Dom了。
不过有些时候,必须要等所有的元素都加载完毕,才可以执行一些方法的时候,
比如说,部分图片或者什么其他方面还没有加载好,这个时候,点击某些按钮,会导致出现意外的情况。
这个时候,就需要用到:
$(window).load(function() {

$("#btn-upload").click(function(){ //比如说:
uploadPhotos();
});

});

 

用$(window).load(function(){...})而不用body.onload()的两个理由:

首先它们都是在页面所有元素(包括html标签以及引用到得所有图片,Flash等媒体)加载完毕后执行的,这是它们的共同点.

不用body.Onload()理由1:

如果我们想同时加载多个函数,我们必须这样写
<body onload="fn1(),fn2()"></body>看起来极其丑陋,如果用$(window).load()我们可以这样加载多个函数
$(window).load(function() {
alert("hello,我是jQuery!");
});
$(window).load(function() {
alert("hello,我也是jQuery");
});
这样写它会从上往下执行这两个函数,并且看起来漂亮多了.

不用body.Onload()理由2:

用body.Onload()不能够做到js和html完全分离,这是一个很严重的问题.

另外用$(window).load(function(){...})和body.onload()都存在同样一个问题,因为开始也说到了,它们都需要等到页面的所有内容
加载完毕才执行,但是如果当网速比较慢的时候,加载一个页面往往需要较长的时间(几秒到十几秒不等,甚至更长...),所以在这里推荐
使用$(document).ready(function(){}),或简写为$(function(){}),因为他会在页面的dom元素加载完毕后就执行,而无需等到图片或其他媒体下载完毕.

 

详解new function(){}和function(){}()

情景一:

var yx01 = new function() {return "圆心"};
alert(yx01);

运行显示:“ [object object] ”,此时该代码等价于:
function 匿名类(){
return "圆心";
}
var yx01 = new 匿名类();
alert(yx01);

改造情景一:

var yx01 = new function() {return new String("圆心")};
alert(yx01);
运行显示:“圆心”,原因如下:
只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实为 return 原始类型 undefined),那么就返回 new 创建的匿名对象。(谢谢 Lunatic_Sun ,描述更精准点)
由于 new String 会构造一个对象,而不是一个 string 直接量,且new String(x) 如果带参数,那么alert它的时候就会返回 x。所以 yx01 将返回 new String(“圆心”) 这个对象,而 alert yx01 则显示 “圆心”。

情景二:

var yx02 = function() {return "圆心"}();
alert(yx02);
运行显示“圆心”,此时该代码等价于:
var 匿名函数 = function() {return "圆心"};
yx02 = 匿名函数();
alert(yx02);
很明显,yx02 返回的是匿名函数的执行结果值,即 yx02 为:“圆心”。

posted @ 2014-07-09 23:56  dapeng111  阅读(184)  评论(0)    收藏  举报