Javascript中变量有两种作用域:
1.全局变量:声明在函数外部的变量(所有没有var直接赋值的变量都属于全局变量)
2.局部变量:声明在函数内部的变量(所有没有var直接赋值的变量都属于全局变量)
Javascript中函数也是对象,所以函数的作用域也遵循上述规则。大多数时候,函数不是在另一个函数内部声明,这样的函数就是全局的,有可能会造成冲突。下面以例子来说明函数的作用域,以及如何来声明“局部”函数。所有代码均亲测。
Step 1. 验证函数作用域是全局的
js_globalfunc.htmlStep 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的代码即来自这篇文章。
网友评论