逆战班学习之-javascript函数作用域

	在说函数作用域之前,我们需要先对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函数定义的是局部,从局部拿全局是可以拿到的。
    总结出变量的访问规则就是:
    父作用域不能拿子作用域;
    子作用域可以使用父作用域。
发布了17 篇原创文章 · 获赞 7 · 访问量 253

猜你喜欢

转载自blog.csdn.net/qq_44381873/article/details/104466909