在javascript中,函数作用域是指每个函数都会创建一个作用域,这个作用域是独立的,函数内部的变量在函数外部无法访问。这里我们来看一个例子:
function outerFunction(){var outerVariable = "I'm from outerFunction";function innerFunction(){var innerVariable = "I'm from innerFunction";console.log(innerVariable); //输出"I'm from innerFunction"console.log(outerVariable); //输出"I'm from outerFunction"}innerFunction();}outerFunction();在上面的例子中,innerFunction只能在outerFunction内部被调用,而innerVariable只能在innerFunction内部被访问,而outerVariable则可以被innerFunction访问。
当然,在javascript中还存在着全局作用域。如果一个变量既没有在函数内部定义,也没有在函数调用时传入参数,那么它就是全局变量,可以在代码的各个位置被访问到。下面我们来看一个例子:
var globalVariable = "I'm from global";function outerFunction(){var outerVariable = "I'm from outerFunction";function innerFunction(){console.log(globalVariable); //输出"I'm from global"}innerFunction();}outerFunction();在上面的例子中,如果变量没有在函数中定义或者被传入参数,那么它就是全局变量。innerFunction中虽然没有定义globalVariable,但是依旧可以访问到它,因为它是全局变量。
除了全局变量外,javascript还存在着块作用域。在ES6中,引入了let和const关键字,使得变量可以在块级作用域中被定义。下面我们来看一个例子:
function outerFunction(){let outerVariable = "I'm from outerFunction";if(true){let innerVariable = "I'm from innerBlockScope";console.log(innerVariable); //输出"I'm from innerBlockScope"console.log(outerVariable); //输出"I'm from outerFunction"}console.log(innerVariable); //ReferenceError: innerVariable is not defined}outerFunction();在上面的例子中,innerVariable只在if语句的{}内部可以访问到,而在{}外部则无法访问到。
总结来说,javascript中的函数作用域可以帮助我们保护变量,避免在程序中出现全局变量和变量污染的现象。同时,ES6中的块作用域也进一步完善了javascript的变量定义机制,提高了代码的可维护性和可读性。
上一篇:javascript中做循环
下一篇:javascript中创建函数









