javascript学习日记之变量的作用域

```

很显然第一个弹出框并没有如我所想弹出的global而是undefined

这是为什么呢?

其实由于函数作用域特性

函数域始终优于全局域

同名的局部变量会覆盖掉全局变量

而第一次调用alert的时候scope还没正式定义 所以为undefined

以上代码可以理解为:

```

function f(){

var scope;

alert(scope);

var scope ="local";

alert(scope);

};

f();

//等价与函数内变量的声明‘提前‘至函数体顶部

```

javascript学习日记之变量的作用域

javascript学习日记


变量的作用域是往往是人们轻易忽略而又至关重要的问题,尤其是在javascript中。
  1. javascript中变量的作用域有以下特点:

    • 以函数划分的函数域
    • 没有特定的块作用域
    • 没有用var声明的变量就是是全局变量

    下面来看一个具体示例:

  1. var global =1;
  2. function f(){
  3. var local = 2;
  4. global++;
  5. return global;
  6. }
  7. alert(f()) ;//2
  8. alert(f()) ;//3
  9. alert(window.local);//undefined

代码中可以看出声明一个全局变量global 和一个局部变量local; 
而函数f()可以访问外面的全局变量global; 
但是在函数f()外 局部变量local是不存在的 
很显然函数内的代码可以像访问局部变量那样访问全局变量, 
反之则不行

2 函数作用域的声明提前问题

先来看如下代码:
  1. var scope ="global";
  2. function f(){
  3. alert(scope);//undefined
  4. var scope ="local";
  5. alert(scope);//local
  6. }
  7. f();

很显然第一个弹出框并没有如我所想弹出的global而是undefined 
这是为什么呢? 
其实由于函数作用域特性 
函数域始终优于全局域 
同名的局部变量会覆盖掉全局变量 
而第一次调用alert的时候scope还没正式定义 所以为undefined 
以上代码可以理解为:

  1. function f(){
  2. var scope;
  3. alert(scope);
  4. var scope ="local";
  5. alert(scope);
  6. };
  7. f();
  8. //等价与函数内变量的声明‘提前‘至函数体顶部

@XiaoNine 2016-11-20 10:14 字数 阅读 8

时间: 2024-10-16 08:56:43

javascript学习日记之变量的作用域的相关文章

JavaScript学习笔记—— 4. 变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值,其中基本类型值是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象: 对于5种基本类型数据:undefined, null,boolean,number和string,采用按值访问,因为可以操作保存在变量中的实际的值: 对于引用类型的值而言,JavaScript并不能直接访问内存中的位置,也就是说不能直接操作对象的内存空间,在操作对象时,实际上是在操作对象的引用而非实际的对象. 在从一个变量向另一个变量复制基本

js基础--javascript基础概念之变量与作用域

js基础--javascript基础概念之变量.作用域 javascript按照ECMA-262 的定义,变量与其他语言变量有所不同.js变量时松散的,不需要事先定义变量类型的.这使得他只是一个保存特定值的一个名称.变量与其数据类型可以在脚本的生命周期内改变. 还有明白几点: JavaScript的变量作用域是基于其特有的作用域链的,JavaScript没有块级作用域. 基本类型和引用类型的值 ECMAScript 的变量有两种不同的数据类型:分别是 基本数据类型值 和 引用类型值 : 基本数据

JavaScript学习笔记——js变量的布尔值

typeof(1): numbertypeof(NaN): numbertypeof(Number.MIN_VALUE): numbertypeof(Infinity): numbertypeof("123"): stringtypeof(true): booleantypeof(window): objecttypeof(Array()): objecttypeof(function(){}): functiontypeof(document): objecttypeof(null)

JavaScript高级程序设计学习(三)之变量、作用域和内存问题

这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于java中涉及到jvm,因此可以自动垃圾回收和内存分配,而不需要手动. 一.变量 每个变量都有其类型,数据类型.在java中分基本数据类型和引用数据类型,js同样如此. 面试题:java的基本数据类型有哪些,及其所占字节?引用类型有哪些? java基本数据类型分别为int(4),float(4),dou

JavaScript 基础(五) 函数 变量和作用域

函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } 上述abs() 函数的定义如下: function 指出这是一个函数定义; abs 是函数的名称: (x) 括号内列出函数的参数,多个参数以,分隔: {...}之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句. 注意:函数体内部的语句在执行时,一旦执行到return 时,函数就执行完毕,并将结果

原生 javascript 学习之 js变量

1.变量的命名 方法的命名(驼峰命名法) 全部小写 : 单词与单词之间全部下划线 (my_namespace) 大小写混合 : 第一个单词首字母小写其他单词首字母大写. 规则 首字符 英文字母或下划线 组成   英文字母 数字 下划线 禁忌   JavaScript 关键字 保留字 2. 变量的声明 显示声明   :  var 关键字 陋习         :  没有类型 重复声明 隐式声明 不声明直接赋值 正解        : 先声明 后读写 先赋值 后运算 3. 变量类型 值类型 A) 占

JavaScript笔记二:变量、作用域和内存

1.基本类型和引用类型 基本类型:简单的数据段 引用类型:可能由多个值构成的对象,只能给引用类型添加属性 当复制他们的值时,基本类型实际上是又开辟了独立的空间存储值,而引用类型则是创建了指针,他们关联到同一个对象 2.执行环境和作用域 延长作用域链,没有块级作用域 3.确定一个值是哪种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符. 4.所有变量(基本和引用)都存在一个执行环境当中,这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的

JavaScript学习日记2 对象

JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成. JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开. 如: var xiaoming={name:'小明',birth:1990,school:'No.1 Middle School', height:1.70,weight:65,score:null} 注意:最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错. 访问属性是通过.操作符完成的,但这要求属性

javascript学习日记1

1.JavaScript:写入 HTML 输出document.write("<h1>This is a heading</h1>");document.write("<p>This is a paragraph</p>"); 2.JavaScript:对事件作出反应<button type="button" onclick="alert('Welcome!')">点