javascript中匿名函数: function(e) 和 function() e邮宝和ems的区别别

西西软件下载最安全的下载网站、值得信赖的软件下载站!
您的位置:
→ jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别
Jquery是优秀的Javascrīpt框架。我们现在来讨论下在 Jquery 中两个页面载入后执行的函数。$(document).ready(function(){
// 在这里写你的代码...
});在DOM加载完成时运行的代码可以简写成jQuery(function(){&});&(function($) {})(jQuery)什么意思?(function(){ })(jQuery);其实际上是执行()(para)匿名方法,只不过是传递了jQuery对象。 相当于 function aa($){} aa(jQuery) 是初始化jquery对象的惯用方法.通俗点说就是在页面加载完成后执行你需要的代码. 不过这个东西,有的时候会使页面跳动,很多JQUERY插件都是在加载完成后,才改变样式的,页面会有跳动或闪动的感觉.比如ui.tab这个插件,页面元素一多,全部显示出来了,它才形成TAB,很晕的说 (funtion(){})();立即执行函数;相当于先申明一个函数,声明完后直接调用;如果参数如:(funtion(str){alert(str)})(&output&));相当于:funtion OutPutFun(str){alert(str);};OutPutFun(&output&);jQuery(function(){ });用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在。不可用于存放开发插件的代码,因为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中的方法(函数)。 (function(){ })(jQuery);用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码请小心使用。 --------------------------------------------------------------------------------(function($){...})(jQuery)实际上是匿名函数,不懂得朋友可以继续往下看。 这里实际上是匿名函数 function(arg){...} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){...})(param) 这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数 而(function($){...})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery var fn = function($){....}; fn(jQuery);是初始化jquery对象的惯用方法..通俗点说就是在页面加载完成后执行你需要的代码. 不过这个东西,有的时候会使页面跳动, (funtion(){})();立即执行函数;相当于先申明一个函数,声明完后直接调用;如果参数如:(funtion(str){alert(str)})(&output&));相当于:funtion OutPutFun(str){alert(str);};OutPutFun(&output&);
阅读本文后您有什么感想? 已有
人给出评价!
访问量多的Javascript函数参数 返回值 调用例子-js教程-网页制作-壹聚教程网Javascript函数参数 返回值 调用例子在js中函数的定义可以使用function函数,然后我们再可以在页面进行函数的调用与传值操作,下面整理了一些关于js函数的例子,希望对各位会有所帮助。 一,函数定义调用
Function(函数)类型实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具备属性和方法,由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。
(1)典型的函数声明
function slide(arguments){
(2)以函数表达式的形式定义函数
var slide = function(arguments){
虽然上面两种方式逻辑上是等价的,但是还是有点小区别:
区别一:例一中的函数会在代码执行以前被加载到作用域中,而例二则是在代码执行到那一行的时候才会有定 义
var loveddde = function(num1,num2){ //使用变量初始化
return num1+num2;
alert(loveddde(1,2));
function box(num1, num2){//普通函数声明
retrun num1+num2;
var box = new Function('num1','b', 'return num1+b');
//使用new的构造函数声明,函数是对象,函数名是指针。
函数调用自身,使用arguments.callee,实现递归
window是一个对象,而且是JS里面最大的对象,是最外围的对象
alert(typeof window); window是对象,类型是对象,window表示全局
alert(this); [object window] this目前表示的是window,因为在window的范围下
alert(typeof this)和window一模一样,所以this就是window
function sum(num){
if(num &=1){
return num*arguments.callee(num - 1);
alert(sum(4)); 4!
函数属性和方法
box.length
prototype属性
两个方法,apply()和call(),每个函数都包含这两种非继承而来的方法
function box(num1, num2){
return num1+num2;}
function sum(num1,num2){
return box.apply(this, [num1, num2]);
function sum2(num1, num2){
return box.apply(this,arguments);}
function sum3(num1, num2){
return box.call(this,num1,num2);}
var color = '红色的'; var box = { color=&蓝色的';};
function sayColor(){
alert(this.color);}
sayColor.call(box); //蓝色的
函数参数设置默认值
function simue (){
& var a = arguments[0] ? arguments[0] : 1;
& var b = arguments[1] ? arguments[1] : 2;
& return a+b;
alert( simue() ); //输出3
alert( simue(10) ); //输出12
alert( simue(10,20) ); //输出30
二、函数调用
1:方法调用模式。
请注意this此时指向myobject。
/*方法调用模式*/
&&& var myobject={
&&&&&&&&&&& value:0,
&&&&&&&&&&& inc:function(){
&&&&&&&&&&&&&&&&&&& alert(this.value)
&&&&&&&&&&&&&&& }
&&& myobject.inc()
2:函数调用模式
请注意this此时指向window
/*函数调用模式*/
&&& var add=function(a,b){
&&&&&&& alert(this)//this被绑顶到window
&&&&&&&&&&& return a+b;
&&& var sum=add(3,4);
&&& alert(sum)
3:构造器调用模式
语言精粹一书建议摒弃这中方式。因为有更好的方式。这里先不介绍。下次发表博文的时候贴出来。
会在这里加一个连接。
/*构造器调用模式& 摒弃*/
&&& var quo=function(string){
&&&&&&&&&&& this.status=
&&& quo.prototype.get_status=function(){
&&&&&&&&&&& return this.
&&& var qq=new quo(&aaa&);
&&& alert(qq.get_status());
4:apply调用模式
==我们可以来看一个更有用的apply实例。看最下面的代码。
&&& //注意使用了上面的sum函数
&&& //与myobject
&&& //这中调用方式的优点在于可以指向this指向的对象。
&&& //apply的第一个参数就是this指针要指向的对象
&&& var arr=[10,20];
&&& var sum=add.apply(myobject,arr);
&&& alert(sum);
看这个apply真正应用。bind这是一个绑定时间的函数
var bind=function(object,type,fn){
&&&&&&&&&&& if(object.attachEvent){//
&&&&&&&&&&&&&&&&&&& object.attachEvent(&on&+type,(function(){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& return function(event){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& window.event.cancelBubble=//停止时间冒泡
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& object.attachEvent=[fn.apply(object)];//----这里我要讲的是这里
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //在IE里用attachEvent添加一个时间绑定以后。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //this的指向不是到object对象本身所以。我们绑定的function里的this.id是无法正常工作的。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //但是如果我们用fn.apply(object)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //这里可以看出我们是把apply的第一个对象也就是this的指向变更给了object所以this.id就变成了
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //object.id 可以正常工作了。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& })(object),false);
&&&&&&&&&&&&&&& }else if(object.addEventListener){//其他浏览器
&&&&&&&&&&&&&&&&&&&&&&& object.addEventListener(type,function(event){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& event.stopPropagation();//停止时间冒泡
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& fn.apply(this)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& });
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&
&&& bind(document.getElementById(&aaa&),&click&,function(){alert(this.id)});
三、匿名函数
函数关键字(function )语句:
function fnMethodName(x) {
&&& alert(x);
&&& 函数字面量(Function Literals):
var fnMethodName = function (x) {
&&& alert(x);
&&& Function()构造函数:var fnMethodName = new Function('x', 'alert(x);')
&&&&&&& 上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数。
四、函数字面量和Function()构造函数的区别
虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。
var f = function fact(x) {
&&& if (x && = 1)
&&&&&&& return 1;
&&&&&&& return x * fact(x - 1);
&&& Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。
&&& Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
&&& 用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。var y = &global&;
function constructFunction() {
&&& var y = &local&;
&&& return new Function(&return y&); // 无法获取局部变量}alert(constructFunction()()); // 输出 &global&
&&& 和函数关键字定义相比Function()构造器有自己的特点且要难以使用的多,所以这项技术通常很少使用。而函数字面量表达式和函数关键字定义非常接近。考虑前面的区别,虽然有消息说字面量的匿名函数在OS X 10.4.3下的某些webkit的引擎下有bug,但我们平常所说的匿名函数均指采用函数字面量形式的匿名函数。更多详细内容可以阅读《JavaScript : The Definitive Guide,
&&& 5th Edition》的Functions那章。
五、匿名函数的代码模式
&&& 昨天hedger wang在他的blog介绍了几种匿名函数的代码模式:
&&& 错误模式:其无法工作,浏览器会报语法错。
&&& function () {
&&&&&&& alert(1);
&&& 函数字面量:首先声明一个函数对象,然后执行它
。(function () {
&&&&&&& alert(1);
&&& 优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数
。(function () {
&&&&&&& alert(2);
&&&&&&& ());
&&& Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。
void function () {
&&&&&&& alert(3);
&&& 这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种
上一页: &&&&&下一页:相关内容提示您:你还未登录。
没有账号?
恭喜你获得新机会
输入好友ID
本次机会已经送出,可复制一下链接给好友!1293人阅读
JS中的匿名函数的用法及优缺点
匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。
这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美。
一、什么是匿名函数?
在Javascript定义一个函数一般有如下三种方式:
函数关键字(function)语句:
function fnMethodName(x){alert(x);}
函数字面量(Function Literals):
var fnMethodName = function(x){alert(x);}
Function()构造函数:
var fnMethodName = new Function('x','alert(x);')
上面三种方法定义了同一个方法函数fnMethodName,
第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。
实际上,相当多的语言都有匿名函数。
二、函数字面量和Function()构造函数的区别
虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。
var f = function fact(x) { if (x & = 1) return 1; else return x*fact(x-1); };
Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。
Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。
var y = &global&;
function constructFunction() { var y = &local&; return new Function(&return y&); // 无法获取局部变量 } alert(constructFunction()()); // 输出 “global”和函数关键字定义相比Function()构造器有自己的特点且要难以使用的多,
所以这项技术通常很少使用。
而函数字面量表达式和函数关键字定义非常接近。
考虑前面的区别,虽然有消息说字面量的匿名函数在OS X 10.4.3下的某些webkit的引擎下有bug,
但我们平常所说的匿名函数均指采用函数字面量形式的匿名函数。
三、匿名函数的代码模式
错误模式:其无法工作,浏览器会报语法错。
function(){ alert(1); }();
函数字面量:首先声明一个函数对象,然后执行它。
(function(){ alert(1); } ) ( );
优先表达式:
( function(){ alert(2); } ( ) );
void操作符:
void function(){ alert(3); }()这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种。
四、匿名函数的应用
《Javascript的一种模块模式》中的第一句话就是“全局变量是魔鬼”。
配合var关键字,匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。
这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美。
实际上,YUI以及其相应的范例中大量使用匿名函数,其他的Javascript库中也不乏大量使用。
Javascript的函数式编程(functional programming)的基石。
具体请看《用函数式编程技术编写优美的 JavaScript》和《函数式JavaScript编程指南》。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:314194次
积分:2767
积分:2767
排名:第5598名
转载:227篇
评论:25条
(5)(1)(1)(5)(1)(3)(7)(5)(10)(4)(1)(7)(5)(1)(5)(9)(24)(1)(4)(1)(4)(3)(4)(17)(23)(15)(30)(3)(2)(1)(28)}

我要回帖

更多关于 e邮宝和ems的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信