预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性,当我们选择面对它的时候,这将成为我们前进的阻碍.作为初学者,我们来测试五种函数调用的方法,从表面来看我们会认为那些函数与C#中函数的作用非常相似,但是我们一会儿可以看到还是有非常重要的不同的地方的,忽视这些差异无疑会导致难于跟踪的bug。首先让我们创建一个简单的函数,这个函数将在将在下文中使用,这个函数仅仅返回当前的this的值和两个提供的参数. HYPERLINK"http://kb.cnblogs.com/page/74838/"? 1 2 3 4 5<scripttype="text/javascript"> functionmakeArray(arg1,arg2){ return[this,arg1,arg2]; } </script>最常用的方法,但不幸的,全局的函数调用当我们学习Javascript时,我们了解到如何用上面示例中的语法来定义函数。我们也知道调用这个函数非常的简单,我们需要做的仅仅是: HYPERLINK"http://kb.cnblogs.com/page/74838/"? 1 2 3 4 5 6 7 8 9makeArray('one','two'); //=>[window,'one','two'] Waitaminute.What'sthatwindow alert(typeofwindow.methodThatDoesntExist); //=>undefined alert(typeofwindow.makeArray); //=> window.makeArray('one','two'); //=>[window,'one','two']我说最普遍的调用方法是不幸的是因为它导致我们声明的函数默认是全局的.我们都知道全局成员不是编程的最佳实践.这在JavaScript里是特别的正确,在JavaScript中避免使用全局的成员,你是不会为之后悔的. JavaScript函数调用规则1 在没有通过明确所有者对象而直接调用的函数中,如myFunction(),将导致this的值成为默认对象(浏览器中的窗口)。 函数调用让我们现在创建一个简单的对象,使用makeArray函数作为它的一个方法,我们将使用json的方式来声明一个对象,我们也来调用这个方法 HYPERLINK"http://kb.cnblogs.com/page/74838/"? 1 2 3 4 5 6 7 8 9 10 11//creatingtheobject vararrayMaker={ someProperty:'somevaluehere', make:makeArray }; //invokethemake()method arrayMaker.make('one','two'); //=>[arrayMaker,'one','two'] //alternativesyntax,usingsquarebrackets arrayMaker['make']('one','two'); //=>[arrayMaker,'one','two']看到这里的不同了吧,this的值变成了对象本身.你可能会疑问原始的函数定义并没有改变,为何它不是window了呢.好吧,这就是函数在JSavacript中传递的方式,函数在JavaScript里是一个标准的数据类型,确切的说是一个对象.你可以传递它们或者复制他们.就好像整个函数连带参数列表和函数体都被复制,且被分配给了arrayMaker里的属性make,那就好像这样定义一个arrayMaker: HYPERLINK"http://kb.cnblogs.com/page/74838/"? 1 2 3 4 5 6vararrayMaker={ someProperty:'somevaluehere', make:function(arg1,arg2){ return[this,arg1,arg2]; } };JavaScript函数调用规则2 在一个使用方法调用语法,像obj.myFunction()或者obj['myFunction'](),这时this的值为obj 这是事件处理代码中bug的主要源头,看看这些例子 HYPERLINK"http://kb.cnblogs.com/page/74838/"? 1 2 3 4 5 6 7 8 9 10 11 12 13<inputtype="button"value="Button1"id="btn1"/> <i