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

js变量和作用域

阅读更多

 

 基本集类型的值和引用类型的值

     5种基本数据类型:Undefined、Null、Boolean、Number和String,这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。

动态属性:

我们创建了一个对象并将值保存在了person中,然后为这个值添加属性。对象不销毁则这个值一直存在。

var person = new Object();
person.name = "Nicholas";
alert(person.name);  //"Nicholas"

 但是我们不能给基本数据类型添加属性,比如:

var name = "Nicholas";
name.age = 27;
alert(name.age);    //undefined

 

复制变量:

 从一个变量向另一个变量复制基本数据类型时,会在变量上创建一个新的对象。他们的值是不会相互影响的。例如:

var num1 = 5;
var num2 = num1;
num1 = 10;
alert(num1);    //10
alert(num2);    //5

 从一个变量向另一个变量复制引用类型时,这个值实际上是一个指针,两个变量实际上引用的同一个对象。例如:

 

var obj1 = new Object();
var obj2 = obj1;
obj1.name = ”Nicholas“;
alert(obj2.name);    //"Nicholas"

 

参数传递:

在向参数传递基本数据类型的值时,被传递的值会被复制给一个内部变量(即命名参数,就是arguments对象的一个元素)。例如:

 

function addTen(num){
    num += 10;
    return num;
}
var count = 20;
var result = addTen(count);
alert(count);    //20
alert(result);    //30
 在向参数传递引用类型的值时,这个值的内存地址复制给一个内部变量。例如:

 

 

function setName(obj){
    obj.name = "Nicholas";
}
var person = new Object();
setName(person);
alert(person.name);    //Nicjolas
 以上代码创建了一个对象,person和obj引用了同一个对象。于是,当在函数内部为obj添加name属性时,外部的person也将改变;下面例子说明了参数是按值传递的,而不是按引用类型传递:

 

 

function setName(obj){
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name);    //Nicjolas
 函数内部修改了参数的值,但原始引用让然保持不变。实际上,当函数内部重写obj时,这个变量引用的就是一个局部对象了,这个局部对象在函数执行完后立即被销毁。

 

 

类型检测:

要检测一个变量是不是基本数据类型,typeof操作符是最佳工具。

 

var s = "Nicholas";
var b = true;
var i = 22;
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
 检测引用类型的值时,ECMAScript提供了instanceof操作符,语法如下:

 

 

alert(person instanceof Object);    //true
alert(colors instanceof Array);     //true
 检测对象时始终返回true ,检测基本类型时返回false。

 

 

执行环境和作用域:

全局执行环境是最外层的一个执行环境,在Web浏览器中,全局执行环境是window对象。

 

var color = "blue";
function changeColor(){
    var anotherColor = "red";

    function swapColors(){
        var tempColor = anoterColor;
        anotherColor = color;
        color = tempColor;
        
        // 这里可以访问color、anotherColor和tempColor
    }
    // 这里可以访问color和anotherColor,但是不能访问tempColor
    swapColor();
}

// 这里只能访问color
changeColor();
 延长作用域链:

 

try-catch语句catch块 和 with语句。两个语句都会在作用域链的前端添加一个变量对象。

 

function buildUrl(){
    var qs = "?debug=true";

    with(location){    //接收location对象
        var url = href + qs;
    }

    return url;
}

try{
   ... 
}catch(e){
   alert(e);    //被抛出的错误对象 
}
 with语句中引用变量href时,实际上是location.href,(可以使用location对象里边的所有属性和方法)。

 

没有块级作用域:

例子:

 

if (true) {
     var color = "red";
}

alert(color);    // red
 for循环中的变量:

 

 

for (var i = 0; i < 10; i++) {
   doSomething(i);
}

alert(i);    // 10
 有for循环创建的变量i即使在循环结束后,依旧存在于循环外部的执行环境中;

 

变量声明:

 

// 使用var声明的变量
function add(num1, num2){
    var sum = num1 + num2;
    return sum;
}

var result = add(10, 20);
alert(result);    //30
alert(sum);      //这里会抛出错误

// 没有var声明的变量
function add(num1, num2){
    sum = num1 + num2;
    return sum;
}
var result = add(10, 20);
alert(result);    //30
alert(sum);    //30

 使用var声明变量会添加到最近的作用域中,否则将会添加到全局作用域中。

 

 

 

分享到:
评论

相关推荐

    javascript变量作用域

    JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 首先,看看 JavaScript 的作用域链是如何工作的。JavaScript 首先在当前作用域中查找变量,如果没有定义,则会继续查找上一层作用域,直到找到...

    js变量作用域

    本篇文章旨在通过一系列示例和解释,帮助读者掌握JavaScript中的变量作用域机制。 #### 二、全局变量与作用域划分 ##### 1. 全局变量 在JavaScript中,全局变量实际上是`window`对象的一个属性。例如,如果在一个...

    函数的全局和局部作用域和变量-作用域.html

    函数的变量和作用域 /全局变量和全局作用域指的是变量或者函数的位置 // 全局变量: 在script之间或者一个独立的js文件中,在全局作用域中定义的变量 全局变量。在任何位置都可以访问 // 全局作用域:在script...

    深入理解变量作用域

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

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

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

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

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

    理解JavaScript变量作用域.pdf

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

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

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

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

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

    关于JS变量和作用域详解

    ECMAScript中的变量类型主要有两种:基本类型值和引用类型值。基本类型值是指那些简单数据段,例如数字、...函数作用域和块级作用域是程序设计中两种不同的变量访问方式,它们在设计和调试程序时都扮演着重要的角色。

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

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

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

    JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最外层函数之外定义的变量、未声明直接赋值的变量(它们会自动声明为全局)以及window...

    JavaScript变量的作用域全解析

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

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

     说起变量第一个要说到的肯定就是作用域,正是因为不熟悉JS的作用域,往往就会把面向对象的作用域张冠李戴,毕竟有些东西总是习惯性的这样,但是并不是每次照搬都是可以的,那么下一个问题就来了,js到底是什么作用...

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

    总之,掌握函数参数和变量作用域是编程基础的重要部分。通过合理使用它们,我们可以编写出高效、可读且易于维护的代码。在实际开发中,理解这些概念有助于避免常见的编程陷阱,并提升代码质量。

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

    JavaScript主要有全局作用域和局部作用域两种。局部作用域通常在函数内部,而全局作用域则在整个脚本或模块中都有效。 当查找变量时,JavaScript会遵循作用域链。从当前执行环境(如函数或块)开始,如果找不到变量...

    JS变量问题详解

    变量作用域的定义决定了变量可以被访问的区域,对于理解变量在不同上下文中的访问权限非常重要。 首先,我们要了解JavaScript中的变量有三种声明方式:使用var关键字、let关键字和const关键字。每种声明方式决定了...

    javascript执行环境,作用域理解

    JavaScript 执行环境和作用域的深层次理解 在 JavaScript 中,执行环境和作用域是两个非常重要和基本的概念,理解了这两个概念对于 JavaScript 中很多脚本的运行结果就能明白其中的道理了。执行环境是一个概念,一...

    第12章 变量、作用域及内存1

    在JavaScript编程语言中,变量、作用域和内存管理是核心概念,对于理解和编写高效、可靠的代码至关重要。在本章中,我们将深入探讨这些主题。 首先,我们要了解变量及其作用域。JavaScript中的变量是松散类型的,这...

Global site tag (gtag.js) - Google Analytics