`
zhouyrt
  • 浏览: 1141735 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript变量作用域

阅读更多

变量的作用域指的是变量的可见性,而生命周期则(存活期)则是从另一个角度考察变量。

 

js中变量的作用域分为全局变量和局部变量,函数内定义的称为局部变量,函数外的称为全局变量。(“函数外的称为全局变量”是相对的,另此处讨论的前提是用var显式声明的变量,函数内不用var定义的变量默认是全局变量,当然忽略var声明变量是不赞成的)。

 

<!DOCTYPE HTML>
<html>
  <head>
    <title>test1.html</title>	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <script type="text/javascript/>
         var glob = 4;//函数外声明全局变量
         function fun() {
             var height = 20;//函数内用var声明的是局部变量
             weight = 50;//函数内不用var声明的是全局变量
         }
          fun();
          alert(weight);
	</script>
  </head>
  
  <body>
  </body>
</html>

 

js中没有块状作用域,即用大括号{}包含的。java中则有。在main方法中写入下代码

public static void main(String... args) {
	for(int i=0;i<5;i++) {
          //todo
	}
     {
          int j=10;
     }
	int z = 20;
    System.out.println(i);// i不可见,语法分析时报错,即编译不通过
	System.out.println(j);// j不可见,语法分析时报错,即编译不通过
	System.out.println(z);// z可见,输出20
}

 

但如果在js中

for(var i=0;i<5;i++) {
     //todo
}

var obj = {name:"Lily"};
for(var attr in obj) {

}

{
  var j=10;
}
alert(i);//输出4,没有块状作用域
alert(attr); //输出name,没有块状作用域
alert(j);//输出10,没有块状作用域

 

这也说明一个问题,避免在全局范围内使用for循环同时声明变量,否则会造成全局命名范围的污染。

 

当然,js1.7中提出了let关键字声明变量(见https://developer.mozilla.org/cn/New_in_JavaScript_1.7),只作用于for语句范围。

for(let i=0;i<5;i++) {
   //todo
}
alert(i);//运行时报错,提示i未定义

 

js1.7需要这样引用 <script type="application/javascript;version=1.7"/></script>

 

ps:firefox2+实现了js1.7

分享到:
评论
3 楼 willko 2009-10-07  
有点错误

没声明var的变量并不是全局变量,当一个变量没声明var的时候,会按照作用域链往上一步一步查找,找到则为该变量,最深的作用域链是全局。


你的这个例子,只是刚好上一层是全局作用域而已。
2 楼 lulaone 2009-10-07  
那个好像是java代码
1 楼 jiangshaolin 2008-12-05  
分析得很好,不过源码有几处错误,int类型都出来了.

相关推荐

    理解JavaScript变量作用域.pdf

    理解JavaScript变量作用域.pdf 本人还有几十本经典javascript书籍以及无数javascript资料,要的加我qq 568094881,本人网址:www.maoshanhai.com

    一道关于JavaScript变量作用域的面试题_.docx

    JavaScript变量作用域是编程语言中一个非常核心的概念,它决定了变量在何处可被访问以及其生命周期。在这道面试题中,我们看到的是如何在不同作用域下声明和使用变量,特别是与for循环相结合的情况。 首先,我们要...

    js变量作用域

    ### JavaScript 变量作用域详解 #### 一、引言 在探讨JavaScript的面向对象特性之前,理解变量作用域的概念至关重要。本篇文章旨在通过一系列示例和解释,帮助读者掌握JavaScript中的变量作用域机制。 #### 二、...

    理解JavaScript变量作用域更轻松

    JavaScript变量作用域是编程基础中的重要概念,它决定了变量在哪些范围内可以被访问。了解变量作用域可以帮助开发者更好地管理代码中的数据,防止意外的变量冲突,从而提高代码的稳定性和可维护性。 JavaScript中...

    Javascript变量作用域详解

    ### Javascript变量作用域详解 Javascript变量作用域是编程中一个非常基础且重要的概念,理解它对于编写有效且可维护的代码至关重要。在Javascript中,变量的作用域主要分为两种:全局作用域和局部作用域。全局变量...

    浅谈Javascript变量作用域问题

    JavaScript变量作用域问题 JavaScript作为一门动态脚本语言,在变量作用域上与其他语言存在显著差异。变量的作用域(Scope)指的是变量可以被访问的代码区域,它决定了哪些部分的代码可以访问该变量。理解变量作用...

    JavaScript变量作用域及内存问题实例分析

    JavaScript变量作用域及内存问题是一个非常重要的概念,在编程过程中起着至关重要的作用。本文将对JavaScript变量作用域、内存问题以及相关的操作技巧进行深入的分析。 首先,我们需要了解变量作用域的相关知识。在...

    Javascript 变量作用域 两个可能会被忽略的小特性

    Javascript变量作用域是编程中非常基础且重要的一个概念,它决定了代码中变量的可访问性和生命周期。在Javascript中,变量作用域有两个可能会被忽略的小特性,即with语句和try-catch语句对变量作用域的影响,以及...

    一道关于JavaScript变量作用域的面试题

    解题前先回顾JavaScript变量作用域的知识。变量i和j都是使用var声明的,所以它们都是函数作用域,即它们在全局作用域内都可以被访问。接下来,执行循环体时,每一次循环都会执行以下步骤: 1. 先将arr[i]的值赋给...

    不同浏览器javascript变量作用域的处理方法

    ### 不同浏览器JavaScript变量作用域的处理方法 #### 一、引言 JavaScript是一种广泛使用的脚本语言,它被设计用于网页开发,并逐渐扩展到服务器端编程和其他领域。JavaScript的作用域规则是理解其行为的关键之一,...

    JavaScript变量作用域_动力节点Java学院整理

    在深入理解JavaScript变量作用域的概念之前,首先我们需要了解JavaScript中变量是如何声明的。在JavaScript中,可以使用`var`关键字来声明变量,这些变量会受到作用域规则的影响。变量的作用域决定了在何处可以访问...

    JavaScript 变量作用域分析

    JavaScript 变量作用域是编程中的关键概念,它决定了变量在何处可以被访问以及它们的生命周期。在这篇文章中,我们将深入探讨JavaScript中的全局作用域、局部作用域、以及一些特殊情况,如函数内部变量的声明和对象...

    基于JavaScript的变量作用域的辨析.pdf

    基于JavaScript的变量作用域的辨析 本文探讨了JavaScript中的变量作用域问题,通过对两种变量的特性从不同角度进行分析和测试,讨论了如何控制变量作用域的有效方法。 变量作用域是JavaScript编程过程中经常遇到的...

    深入理解变量作用域

    本文将从JavaScript权威指南出发,深入探讨变量作用域的相关知识点,包括全局作用域、局部作用域、以及闭包等高级概念。 #### 二、全局作用域与局部作用域 1. **全局作用域** - 定义:在JavaScript中,如果一个...

    javascript 变量作用域 代码分析

    JavaScript中的变量作用域是编程中一个至关重要的概念,它决定了变量在何处可被访问和其生命周期。作用域的划分在JavaScript中主要基于函数,而不是像其他一些语言那样基于块(例如,C++或Java的{}结构)。理解这...

    javascript变量作用域使用中常见错误总结

    JavaScript中的变量作用域是编程时一个至关重要的概念,它决定了变量在何处可被访问以及何时可被访问。这里,我们来深入探讨一下标题和描述中提及的常见错误和理解难点。 1. **全局变量与局部变量** - 全局变量在...

Global site tag (gtag.js) - Google Analytics