文档章节

费解的javascript作用域

漂泊者及其影子
 漂泊者及其影子
发布于 2014/06/13 09:46
字数 434
阅读 60
收藏 0

在编程语言中,作用域控制着变量的可见性及生命周期。对程序员来说这是一个重要的帮助,因为它减少了命名冲突,并且提供了自动内存管理。

function fengshu() {
    // 函数体内存在三个局部变量 i j k
    var i = 0;
    if (i === 0) {
        var j = 10;
        for (var k = 0; k < 3; k++) {
            console.log(k); // 0 1 2
        }
        console.log(k); // 3
    }
    console.log(j); //10
}



大多数使用c语言语法的语言都拥有块级作用域,在一个代码块中(括在一对花括号中的语句集)定义的所有变量在代码块的外部是不可见的定义在代码块中的变量在代码块执行结束后被释放掉,这是件好事。

糟糕的是,尽管代码块的语法是否表现出它支持块级作用域,但实际上javascript并不支持,这个混淆之处可能成为错误之源。

javascript确实有函数作用域,那意味着定义在函数中的参数和变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在该函数的任何地方都可见。

很多现代语言都推荐尽可能迟地声明变量。而且在javascript上的话却会成为糟糕的建议,因为它缺少块级作用域。所以最好的办法是在函数体的顶部声明函数中可能用到的所有变量。


所以,从javascript 作用域得出的结果是javascript有函数作用域,但并没有所谓的块级作用域。

© 著作权归作者所有

共有 人打赏支持
漂泊者及其影子
粉丝 42
博文 121
码字总数 72105
作品 0
广州
程序员
私信 提问
JavaScript 需要掌握的知识

1.不仅仅是面试,JavaScript 开发者都应该知道的十个概念(https://my.oschina.net/editorial-story/blog/1529543) 2. 深入理解javascript原型和闭包(完结)(http://www.cnblogs.com/wangfup...

IT追寻者
2016/06/25
0
0
JavaScript的变量作用域

在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的。 JavaScript没有块级作用域。 函数中声明的变量在整个函数中都有定义。 1、JavaS...

biGpython
2011/08/13
0
0
JavaScript中的this指针 理论化this指针的定义

JavaScript现在应用之广泛,远超其他任何语言,只要是一个合格的网站应用,基本上多多少少都会有JS的存在。在JavaScript中,this的指向被不少Coder所不解,但其实JS中的this理解起来也是相当...

superwebmaster
05/29
0
0
图解Javascript上下文与作用域

本文尝试阐述Javascript中的上下文与作用域背后的机制,主要涉及到执行上下文(execution context)、作用域链(scope chain)、闭包(closure)、等概念。 >> 原文 << Execution context 执...

rainyear
2015/07/06
0
7
26个精选的JavaScript面试问题

译者按: 从各个平台精选整理出26道由浅入深的题目助你面试 原文: Top 26 JavaScript Interview Questions I Wish I Knew 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文...

Fundebug
10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

new Date() 在Safari下的 Invalid Date问题

问题复现 var timeStr = '2018-11-11 00:00:00';var time = new Date(timeStr);// error: Invalid Date... 在safari浏览器下,time为Invalid Date, 导致后面代码执行错误; 其他浏览器诸...

会写代码的husky
14分钟前
1
0
0009-如何升级Cloudera Manager和CDH

1.文档编写目的 本文档讲述如何升级Cloudera Manager和CDH,通过本文档,您将学习到以下知识: 1.如何对Cloudera Manager进行停机升级 2.如何对CDH进行停机升级 3.如何在不影响集群作业的情况...

Hadoop实操
24分钟前
0
0
vue2中引用 better-scroll的方法

文章主要介绍了vue2中引用better-scroll和使用 better-scroll的方法,使用时有三个要点及注意事项在文中给大家详细介绍 ,需要的朋友可以参考下 使用时有三个要点: 一:html部分 <div class...

前端攻城老湿
34分钟前
0
0
浅谈教你如何掌握Linux系统

linux能做什么?相信绝大数人都有这样的疑问。可以玩吃鸡吗?可以玩lol吗? 如果你是以娱乐的名义来评价linux的可用性,对不起,linux可能不适合你,因为linux是一个工具,他是教你聪明的,不...

linuxprobe16
41分钟前
0
0
java中线程池的生命周期

线程池生命周期包括: RUNNING:接收新的任务并处理队列中的任务 SHUTDOWN:不接收新的任务,但是处理队列中的任务 STOP:不接收新的任务,不处理队列中的任务,同时中断处理中的任务 TIDYING:所...

小刀爱编程
49分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部