美文网首页
JS | Javascript中函数的作用域

JS | Javascript中函数的作用域

作者: 码农学禅 | 来源:发表于2018-09-11 12:00 被阅读0次

    Javascript中变量有两种作用域:

    1.全局变量:声明在函数外部的变量(所有没有var直接赋值的变量都属于全局变量)

    2.局部变量:声明在函数内部的变量(所有没有var直接赋值的变量都属于全局变量)

    Javascript中函数也是对象,所以函数的作用域也遵循上述规则。大多数时候,函数不是在另一个函数内部声明,这样的函数就是全局的,有可能会造成冲突。下面以例子来说明函数的作用域,以及如何来声明“局部”函数。所有代码均亲测。

    Step 1. 验证函数作用域是全局的

    js_globalfunc.html

    Step 2.在函数内部定义函数

    这个文件实际定义了两个Script:第一个定义了函数doSomething,第二个可以正确调用doSomething,说明这样定义的函数是全局的。

    js_func_localized_via_func.html

    这个文件把函数doSomething定义在另一个函数A里面,这样doSomething的作用域就是函数A内部。通过运行结果可以知道:在函数A内部的函数test可以调用doSomething,但在函数A外部,doSomething就没有被定义了。

    Step 3. 在匿名函数内部定义函数

    把Step 2的函数A改成匿名函数:

    js_func_localized_via_anonymousfunc.html

    执行结果和Step 2类似。需要注意匿名函数的写法:

    1. 直接写function () {...}是不可以的,必须用()括起来,即(function () {...})

    2. 执行匿名函数直接在函数后面加上(),即第17行的()

    Step 4. 用匿名函数封装成员变量和方法

    可以用匿名函数把变量和方法封装起来,类似对象的定义:

    js_object.html

    代码self-explaining,就不再解释了。

    进一步可以理解RequireJS中define的原理。事实上,上面step 4的代码即来自这篇文章。

    相关文章

      网友评论

          本文标题:JS | Javascript中函数的作用域

          本文链接:https://www.haomeiwen.com/subject/pooygftx.html