码迷,mamicode.com
首页 > Web开发 > 详细

js中变量名提升和函数名提升

时间:2017-09-15 22:32:05      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:匿名   变量   改变   fun   开始   fine   约数   log   说明   

首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域。

并且,函数的实质也是一个变量,所以可以改变它的值,即赋值。所以变量名提升和函数名提升非常相像。

1.变量名的提升发生在函数内部。看下面的例子。说明:第一个因为弹出undefined,相当于在上面定义了var num;因为函数内部,定义了var num=20;就相当于在一开始定义了var num;这就是变量名的提升。

    var num = 10;

    function func() {
        alert(num); //undefined
        var num = 20;
        alert(num); //20
    }
    func();
    alert(num) //10

相当于:

var num = 10;

    function func() {
        var num;
        alert(num); //undefined
        var num = 20;
        alert(num); //20
    }
    func();
    alert(num) //10

如果没有var

var num = 10;

    function func() {

        alert(num); //10
        num = 20;
        alert(num); //20
    }
    func();
    alert(num) //20

函数嵌套道理一样

 var num = 10;

        function func() {
            alert(num); //undefined
            num = 20;

            function func1() {
                alert(num); //undefined
                var num = 40;
                alert(num) //30
            }
            func1()
            alert(num); //20
        }
        func();
        alert(num) //10

2.函数名提升发生在lambda函数上,即匿名函数。和变量名提升一个道理。

        var func = function () {
            alert("abc")
        };

        function func1() {
            func(); //func is not a function
            var func = function () {
                alert("123")
            };
            func()
        }
        func1();

省去var

  var func = function () {
            alert("abc")
        };

        function func1() {
            func(); //abc
            func = function () {
                alert("123")
            };
            func()//123
        }
        func1();

改变函数,不使用匿名函数

        var func = function () {
            alert("abc")
        };

        function func1() {
            func(); //123
            function func() {
                alert("123")
            };
            func()//123
        }
        func1();

 

js中变量名提升和函数名提升

标签:匿名   变量   改变   fun   开始   fine   约数   log   说明   

原文地址:http://www.cnblogs.com/greatfish/p/7528603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!