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 为:“圆心”。

浙公网安备 33010602011771号