搜索:
首页 >> JavaScript >> Js高级编程 >> JavaScript,5种调用函数的方法[译]

JavaScript,5种调用函数的方法[译]

2009-2-24 作者:卢克 来源:译言 投递文章

一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性, 当我们选择面对它的时候,这将成为我们前进的阻碍.

作为初学者,我们来测试五种函数调用的方法,从表面来看我们会认为那肯定和C#的函数一样的使用,但是我们一会儿可以看到还是有非常重要的不同的地方的,而且如果忽视这些毫不疑问的会导致很难跟踪的bug.

首先让我们创建一个简单的函数,这个函数将在剩下的文章里使用到,这个函数仅仅返回当前的this的值和两个提供的参数.

<script type="text/javascript">
function makeArray(arg1, arg2){
    return [ this, arg1, arg2 ];
}
</script>

最常用的方法,但不幸的,全局的函数调用

当我们学习了Javascript我们就学会了如何像上面那样的语法去定义函数,我们也知道调用这个函数非常的简单,我们需要做的仅仅是:

makeArray('one', 'two');
// => [ window, 'one', 'two' ]

Wait a minute. What's that window object doing there? Why is it the value of this? If you haven't stopped to think about it, please stay with me here.
等一等,为何是那个Window对象在这里干嘛呢,为何this的值是它呢,如果你以前没有停下来思考这个问题,那么请和我一起来分析吧,

在Javascript里,我没有指特定的浏览器,有一个全局的对象, 那些看起来散落在你的脚本里的每一行代码(例如在一个对象外的声明)其实都被写在了一个全局对象的上下文里.在我们的例子中,其实那个makeArray函数可以说不是一个松散的全局函数,而是全局对象的一个方法, 让我们返回来看浏览器,在这个环境里它的全局对象被映射到window对象.让我们来证明一下:

alert( typeof window.methodThatDoesntExist );
// => undefined
alert( typeof window.makeArray);
// => function

所有的这些意味着我们之前调用 makeArray的方法是和下面调用的方法一样的

window.makeArray('one', 'two');
// => [ window, 'one', 'two' ]

我说最普遍的调用方法是不幸的是因为它导致我们声明的函数默认是全局的.我们都知道全局成员不是编程的最佳实践.这在JavaScript里是特别的正确,在JavaScript中避免使用全局的成员,你是不会为之后悔的.

JavaScript函数调用规则1 在函数被直接调用而没有所属的对象,像myFunction()将导致this的值为默认的全局对象(在浏览器里为window)

1   2  3 下一页 尾 页
Tags:函数  JavaScript  对象  调用 
相关文章
手机版 Js高级编程 Asp之家 Aspxhome.com
闽ICP备06017341号