在说函数作用域之前,我们需要先对javascript的函数作一个初步了解:
一、javascript中函数的概念:
在javascript中函数其实也是一个容器,只不过放的是代码,可以由许多代码组成,通过行为或自身执行,简单来说就是,可以实现某个功能的代码块,叫函数。
二、函数的分类:
1.有名函数:语法: function fn(){},是正常函数,创建之后,正常执行;
2.无名函数:语法: function (){},不是正常函数,不允许直接存在于代码空间内;
3.匿名函数:语法:(function (){})(),最大的特点:自动执行。
三、函数的作用域:
所谓函数的作用域:就是代码生效的区域,可以分为一下两大部分:
1、全局作用域:整个区域内,都有效。不属于任何一个函数的区域,叫全局作用域。在全局作用域中的变量,叫全局变量,全局变量在当前代码内的任何区域都可以拿到,生命周期:随着程序的执行一直存在。
2、局部作用域:可以理解为只要是在函数中,就是一个局部的区域,叫局部作用域。 在局部作用域中的变量,叫局部变量,局部变量的作用区域,只在当前所在的局部作用域可以拿到,生命周期:作用域开始,被创建;作用域结束,被删除。
下面可以从几个例子中感受一下全局作用域和局部作用域的区别。
var a = 10;
console.log(a);
我们只定义var=10,没有函数包括,它就是全局变量。
function fn(){
var a = 10;
console.log(a);
}
fn();
此时能拿到a的值,因为a在这个函数内,再看下一个;
function fn(){
var a = 10;
}
fn();
console.log(a);
此时拿不到a的值,因为a在函数内,而 console.log(a);在函数外,不能拿到a。
function box(){
function fn1(){
console.log("hello");
}
}
box();
fn1();
此时fn1()是不能打印出“hello”,因为在box外边执行不到fn1(),也就是不能从全局中拿到局部。
function box(){
function fn1(){
console.log("hello");
}
fn1();
}
box();
此时fn1()可以打印出“hello”,因为在box里面能执行fn1();
function fn(){
console.log("world")
}
function box(){
fn();
}
box();
此时执行fn(),能打印出“world”,因为fn定义的是全局,box函数定义的是局部,从局部拿全局是可以拿到的。
总结出变量的访问规则就是:
父作用域不能拿子作用域;
子作用域可以使用父作用域。
逆战班学习之-javascript函数作用域
猜你喜欢
转载自blog.csdn.net/qq_44381873/article/details/104466909
今日推荐
周排行