• 【转载】javascript中的函数对象


    原文地址:http://www.cnblogs.com/phpzxh/archive/2009/09/16/1568137.html【侵删】

    在javascript中函数的申明方式有四种 下面代码中一句代表了一种

    1 function func1(…){…} 
    2 var func2=function(…){…}; 
    3 var func3=function func4(…){…}; 
    4 var func5=new Function();

    第一种就是我们常见的函数申明方式,函数名为func1。第二种和第三种的区别是第二种是匿名函数,而第三种不是。第四种用的是对象申明的方式,因为javascript每个函数就是一个对象。

    1 //这两种声明是等价的
    2  function func1(a,b){
    3   return a+b;
    4 }
    5 var func1 = new Function("a","b","return a+b");

    匿名函数和有名字函数在javascript中是有点区别的我们看代码

    1  //声明一个匿名函数
    2  func1();
    3 var func1 = function(){
    4      alter(1);
    5 }

    运行火狐
    firbug中说func1未定义
    看看另外一种方式

    1 func1();
    2 function func1(){
    3   alert(1);
    4 }

    由此可见,尽管JavaScript是一门解释型的语言,但它会在进行函数调用时,检查整个
    代码中是否存在相应的函数定义,这个函数名只有是通过 function funcName()形式定义的才有效,而不能是匿名函数。

    匿名函数的申名方式有个好处就是防止函数重命名。在javascript还有匿名函数可以在申明之后立即调用,代码如下。

    1 var i=function(a,b){
    2     return a+b;
    3 }(1,2);

    这里i=3是返回值而不是函数,这是因为()的优先级比=高
    在jquery中的插件扩展就是这样实现的,我们来看看代码。

    复制代码
     1 (function($){
     2  
     3 $.fn.select = function(select) {
     4     if (select == undefined) select = true;
     5     return this.each(function() { 
     6         var t = this.type;
     7         if (t == 'checkbox' || t == 'radio')
     8             this.checked = select;
     9         else if (this.tagName.toLowerCase() == 'option') {
    10             var $sel = $(this).parent('select');
    11             if (select && $sel[0] && $sel[0].type == 'select-one') {
    12                 // deselect all other options
    13                 $sel.find('option').select(false);
    14             }
    15             this.selected = select;
    16         }
    17     });
    18 };
    19  
    20 })(jquery)
    复制代码

    注意直接这样写
    function(a,b){
    return a+b;
    }(1,2)
    是会报语法错误的。

  • 相关阅读:
    Navicat for MySQL破解版安装
    LACP学习笔记
    MUX VLAN
    Beyond Compare用于文件比较还是蛮好的选择,特别是我们程序袁用于比较两个项目的时候,最初使用的是Beyond Compare3一直用着挺好的,几年前更新了版本4,用着用着就提示试用期30天已过期,于是我尝试如下步骤:
    思科交换机如何进行备份与还原?
    vSphere ESXi 6.7 注册码(有效)
    VMware ESXi 6.7密码正确不能登录
    Esxi 6.5 6.7的root密码经过一段时间就不可用的解决方法
    Windows Server 2012 R2 安装密钥
    ubuntu 16 添加多个IP
  • 原文地址:https://www.cnblogs.com/xzzzh/p/6369326.html
Copyright © 2020-2023  润新知