`

JavaScript变量与作用域

阅读更多
1.JavaScript的变量类型
   JavaScript的变量分为基本类型和引用类型.基本数据类型是直接存在栈空间的简单数据段,这种类型直接将值保存在内存的某个位置.引用数据类型存储的是指向实际存储于堆内存中的对象的地址.
   JavaScript中的基本数据类型共有五种:Number,Null,Undefined,Boolean和String.需要注意的是,js中的String是基本数据类型.
   对于基本类型变量的访问,是按值访问的,而对于引用变量的访问是按引用访问的.
2.动态属性
   对于引用数据类型的变量,可以对其添加属性和方法,也可以删除属性和方法,例如:
var p = new Object();
p.name = "张三";
alert(p.name);//张三
但是对于基本数据类型来说,这样是不允许的,如下:
var str = "张三";
str.age = 20;
alert(str.age);//undefined
3.复制变量值
对于基本类型的变量,从一个变量向另一个变量复制,实际上是将第一个变量存储的值复制给另一个变量。因此,复制完成之后,对第一个变量进行修改,修改操作不会影响另一个变量的值。例如;
var num1 = 1;
var num2 = num1;
alert(num2);//1
num1 = 2;
alert(num2);//1
但是对于引用数据类型,将一个变量复制给另一个变量,实际上是存储第一个变量所存储的地址拷贝给另一个变量,换句话说,这两个变量之后就指向同一块内存空间。因此,接下来对第一个变量的操作也会影响第二个变量。例如:
var p1 = newObject();
p1.name = "张三";
p1.age = 20;
var p2 = p1;
alert(p2.age);//20
p1.age = 30;
alert(p2.age);//30
4.参数传递
JavaScript的参数传递全部是按值传递。也就是说,将函数外部的值复制给函数的参数。对于基本类型来说,和变量的复制是一样的,对于引用数据类型,则如同引用数据类型的复制一样。下面分别举例说明:
function inc(num) {
	num += 1;
}
var i = 10;
alert(i);//10
inc(i);
alert(i);//10
对于基本类型变量i,将其传递给函数inc,实际上是将其值10传递给函数inc的参数,在函数内部,对其内部的变量进程加1操作,因此不会影响i。
再看下面的代码:
function setName(obj) {
obj.name = "张三";
}
var person = newObject();
setName(person);
alert(person.name);//张三
将person传递给函数setName,于是将person所指向的堆内存地址传递给函数的参数,因此,参数指向的内存和person指向的内存是同一个地址。因此在函数内部修改该地址指向对象的内容也会反映到person上来。
5.检测变量的类型
检测基本类型,使用typeof运算符即可,例如:
var s = "张三";
var b = true;
var i = 20;
var u;
var n = null;
var o = new Object();
alert(typeof s);//string
alert(typeof b);//boolean
alert(typeof i); //number
alert(typeof u); //undefined
alert(typeof n); //object
alert(typeof o); //object
但是,在检测引用数据类型方面,typeof并不给力,需要使用instanceof运算符:
alert(person instanceof Object);//person是不是Object类型的?
6.变量作用域
js的作用域主要有两种:全局作用域和局部作用域。值得一提的是,在js中,没有块级作用于。例如:
for(var i = 0; i < 10; i++) {
//do sth
}
alert(i);//10
以上面的代码为例,for语句块不存在一个特别的作用域,因此在for循环之外,i依然可以被访问到。同理,对于if-else语句也是这样的。
if(true) {
color = "red";
}
alert(color);//red
但是还是有办法临时的增加一种新的作用域,主要体现在try-catch和with语句。

参考书:
《JavaScript高级程序设计》
0
0
分享到:
评论

相关推荐

    javascript变量作用域

    JavaScript 变量作用域详解 JavaScript 变量作用域是基于其特有的作用域链的。在 JavaScript 中,变量作用域是指变量可以被访问和修改的范围。 JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 ...

    理解JavaScript变量作用域.pdf

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

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

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

    js变量作用域

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

    深入理解变量作用域

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

    JavaScript 基础函数_深入剖析变量和作用域

    JavaScript是一种广泛用于网页开发的脚本语言,它的函数和作用域是实现代码逻辑结构和模块...理解JavaScript中的变量作用域非常重要,它有助于避免变量命名冲突和意外的变量修改,从而编写出更加健壮和易于维护的代码。

    JavaScript程序设计-变量作用域.pdf

    JavaScript是一种广泛用于网页和网络应用的编程语言,其核心特性之一就是变量作用域。变量作用域决定了变量在何处可以被访问以及何时会被销毁。本文将深入探讨JavaScript中的全局变量、局部变量、变量提升、词法作用...

    JavaScript变量的作用域全解析

    变量作用域是程序中定义这个变量的区域。 先来看一段示例: /* 代码1 */ var scope = "global "; function checkScope() { var scope = "local "; function childCheck() { var scope = "childLocal "; ...

    JavaScript程序设计变量作用域共4页.pdf.zi

    本文将深入探讨JavaScript中的变量作用域,以及它如何影响代码的运行和组织。 首先,我们来理解什么是变量作用域。在JavaScript中,变量作用域决定了变量在何处可以被访问和识别。主要有三种类型的作用域:全局作用...

    【JavaScript源代码】JavaScript高级程序设计之变量与作用域.docx

    JavaScript是一种广泛应用于网页和网络应用的脚本语言,它的核心特性之一是变量和作用域的概念。在深入探讨这些概念之前,我们先理解一下原始值和引用值的区别。 1、原始值与引用值 JavaScript中有六种原始数据...

    深入理解JavaScript作用域和作用域链

    JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性及生命周期。JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最...

    Javascript的词法作用域分析.pdf

    Javascript中的词法作用域分析是指变量的作用域不是在执行时决定的,而是在定义时决定的,也就是说通过静态分析就能确定。因此,词法作用域也叫做静态作用域。 在Javascript中,一个方法的词法作用域是指该方法在...

    Javascript变量的作用域和作用域链详解

    JavaScript中的变量作用域和作用域链是编程中非常重要的概念,尤其对于JavaScript这种函数作用域的语言来说更是如此。本文将详细解析这两个知识点,并通过实例帮助理解。 **一、变量作用域** JavaScript中的变量...

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

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

    javascript执行环境,作用域理解

    执行环境是一个概念,一种机制,用来完成 JavaScript 运行时在作用域、生存期等方面的处理,它定义了变量或函数是否有权访问其他数据,决定各自行为。 一、执行环境(Execution Context) 在 JavaScript 中,所有...

    理解JavaScript变量作用域更轻松

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

    JavaScript 基础函数_深化剖析变量和作用域_.docx

    在JavaScript编程语言中,变量和作用...总的来说,理解JavaScript中的函数定义、调用、参数处理、变量作用域和安全实践是编写高效、安全代码的基础。掌握这些概念可以帮助开发者编写出更加灵活和可靠的JavaScript代码。

    3.8 函数参数与变量的作用域(ppt).zip

    变量作用域决定了变量在何处可以被访问。主要有以下几种类型的作用域: 1. **全局作用域**:在所有函数外部定义的变量拥有全局作用域,它们在整个程序中都可访问。例如: ```python x = 10 def print_x(): print...

    深入浅析JavaScript中的作用域和上下文

    3. **块级作用域**:在ES6之前,JavaScript没有块级作用域,但ES6引入了`let`关键字,使得变量能够在特定代码块(如`if`、`for`或`while`语句内)中定义并保持其作用域限制。 - 示例: ```javascript function ...

Global site tag (gtag.js) - Google Analytics