js中function对象是一个令人着迷的东西,但由于他太过于灵活,常常令人迷惑,下面我贴一些代码: 大多数人这样简写: 代码如下:function test () {} 《jsvascript语言精粹》整本书这样写: 代码如下:var test = function () {} 函数可以立即运行并赋值: 代码如下:var test = function () {} () // test === undefined var test2 = function () {return 糖饼}() // test2 === 糖饼 但是函数简写方式不能直接运行,下面代码会报...
引入 匿名函数 闭包 变量作用域 函数外部访问函数内部的局部变量 用闭包实现私有成员 引入 闭包是用匿名函数来实现。闭包就是一个受到保护的变量空间,由内嵌函数生成。“保护变量”的思想在几乎所有的编程语言中都能看到。 先看下 JavaScript 作用域: JavaScript 具有函数级的作用域。这意味着,不能在函数外部访问定义在函数内部的变量。 JavaScript 的作用域又是词法性质的(lexically scoped)。这意味着,函数运行在...
情况1:eval里没有function,直接执行: eval("alert('ss');");//所有浏览器正确均输出 情况2:eval里有function,function立即执行: eval("(function(){alert('ss');})();");//所有浏览器正确输出 情况3:eval里有function,使用变量保存function引用并调用该function: var f=eval("(function(){alert('ss');})"); f();//IE下报错:缺少对象 其他浏览器正常 当在eval定义一个function并返回给变量时,IE报错:缺少对象。可见IE下...
javascript中最有特色而又让你困惑的function算一个了 下面看一下常用操作 代码如下:function doit(){ ..... } doit(); javascript中的函数我们可以把它当作方法使用 代码如下: var obj=new Object(); obj.say=function(){ ..... } obj.say(); 而function实际上就是对象(即Function类型的实例) 代码如下:function result(num1, num2) { return num1 + num2; } var result = new Function("num1"...
疑惑出自于: 代码如下:function foo { this.name = foo; } alert(foo.prototype === Function.prototype ); //false。 当时一直没想明白为啥foo的原型不是Function.prototype。 下面例子让我想当然的认为o.prototype === Function.prototype 应该为true的: 代码如下:function foo() { this.name = foo; } Function.prototype.sayHello = function (parent) { alert(hello); }; foo.sayHello(); //alert hello 当...
注:理论过于深入,本人不改保证所有的理论都是正确的,但经过多方测试还未发现实际代码与理论冲突的问题。如有错误,望高人指点! Function 首先回顾一下函数对象的概念,函数就是对象,代表函数的对象就是函数对象。所有的函数对象是被Function这个函数对象构造出来的。也就是说,Function是最顶层的构造器。它构造了系统中所有的对象,包括用户自定义对象,系统内置对象,甚至包括它自已。这也表明Function具有自举性(自已构...
使用new Function( ) 来进行语法检查 eval( ) 方法是不能乱用的,在不适当的时候使用eval( ) 方法可能导致整个程序都会出问题的; 而new Function( ) 就没这么大问题。虽然new Function( ) 在任何情况下,构造的函数都是在全局作用域下直接工作的,但只作语法检查的话,并不会因为作用域问题而产生意外结果,只要你不直接调用通过它构造的新函数。 在eval( ) 接受的参数前面增加“0,” 其实这是由于IE中存在一个bug。出于某种原因,...
这里实际上是匿名函数 function(arg){...} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){...})(param) 这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数 而(function($){...})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery var fn = function($){....}; ...
不就利用window对象的setTimeout方法吗?Bingo,一点没错!如果你在一个应用里面常常要“延时执行某某函数”,那末基于DRY的原则,可以针对Function全局对象进行扩展,为函数增加一个延时方法如delay,这样会让你的代码更简洁有效。 扩站Function对象增加delay方法如下: 代码如下:Function.prototype.delay=function(this1,timeout){ this1=this1||null; timeout=timeout||0; var _this=this; var args=[]; //获取参数,注:第1、第2...
话说在楼猪理解和实践能力尚欠火候的时候,在这篇里曾经照搬了李战老师不少东西写在自己的博客里作为“知识储备”。这一次还是不能免俗。在翻到第5章的时候,被开篇第二段话深深吸引和折服:“函数具有对象的全部特征,你完全可以把函数当对象调用。其实,函数就是对象,只不过比一般的对象多了一个括号“{}”操作符,这个操作符用来执行函数的逻辑,即函数本身还可以被调用,一般对象却不可以被调用,除此之外完全相同”。寥寥数语...
代码如下:function fn() { for(var i = 0;i < arguments.length;i++){ alert("第"+(i+1)+"个参数的值:"+arguments[i]); } } var str = <div id="{wo}" >{ni}</div>; str.replace(/\{([a-z]+)\}/ig, fn); 根据多次测试由输出结果可以得出fn中: 第一个参数为匹配到的字符串,如{wo}和{ni}; 第二个参数可以有0-N个,为第一个参数中匹配到一个括号正则的字符串,如第一个参数中的wo和ni,能匹配([a-z]+), 括号有...
1.最基本的作为一个本本分分的函数声明使用。 代码如下:function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 代码如下:function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 代码如下:(function(){ //独立作用域 })(); 4.可以作为选择器使用: 代码如下:var addEvent=new function(){ if(!-[1,]) return function(elem,type,func){attachEvent(elem,on+type,func);}; else r...
如下: 代码如下:function Student() { //定义类Student中的字段,并赋予初值,但此字段的访问权限是public this.studentNo = s001; this.studentName = 小明; this.sex = 男; //定义类Student中的方法updateStudentName ,用于修改studentName 值 this.updateStudentName = function(studentName) { this.studentName = studentName; } } 如上代码便已定义了一个Student类,并包含studentNo ,studentName , sex 3个字段,方法...
1.最基本的作为一个本本分分的函数声明使用。 代码如下:function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 代码如下:function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 代码如下:(function(){ //独立作用域 })(); 4.可以作为选择器使用: 代码如下:var addEvent=new function(){ if(!-[1,]) return function(elem,type,func){attachEvent(elem,on+type,func);}; else r...
代码如下:var f1 = function(p1,p2,p3){ switch(arguments.length){ case 0: alert("无参版本的f1") break; case 1: alert("1个参数版本的f1:" + p1) break; case 2: alert("2个参数版本的f1:" + p1 + "," + p2) break; case 3: alert("3个参数版本的f1:" + p1 + "," + p2 + "," + p3) ...