侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 129023 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

深入浅出理解JavaScript函数作用域和变量声明提前

2024-04-28 星期日 / 0 评论 / 0 点赞 / 6 阅读 / 2164 字

函数作用域 在javaScript中是没有块级作用域的,代替的是函数作用域,这个与传统的java语言和我熟悉的actionScript是不同的。 function test(o){

函数作用域

在javaScript中是没有块级作用域的,代替的是函数作用域,这个与传统的java语言和我熟悉的actionScript是不同的。

    function test(o){        if(typeof o == "object"){            var j = 1;            for(var k=0; k<10; k++){                console.log(k);            }            console.log(k);  // 10        }        console.log(j); // 1    }    test({key:1});

传统的块级作用域,当声明变量k,那么k在for循环中是有效的,离开for循环是没有定义的,但是在javaScript中,输出了10,证明k无论在函数体内部任何位置声明,都是可以保存记录的。

变量声明提前

在javaScript中,在一个函数内部的内部变量,无论在函数内部哪里声明,都会立刻生效,影响了整体函数的内部变量。当然这回带来困扰,让代码产生歧义,最好的做法是在函数内部开始处进行声明,避免与全局变量的冲突,因为在函数内部,内部变量是优先执行的,忽略全局变量。

    var scope = "global";    function f(){        console.log(scope);  // undefined        var scope = "local";        console.log(scope);  // local    }    f();

上面的例子说明内部变量取代全局变量,并且变量声明提前,对阅读代码和程序执行造成了困扰。

    var scope = "global";    function f(){        console.log(scope);  // global    }    f();

内部变量不声明,全局变量被引用,正确输出引用的定义。

通过学习javaScript最大的感受就是要理解并记住与传统语言的编程运行差异,当然传统语言更好的编程习惯将保证你的代码更健壮,但是了解差异将帮助你更深入的理解javaScript并写出更好的前端代码。

广告 广告

评论区