JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例

javascript:变量的声明
以下是几种声明变量的方式


代码如下:

var value;
 var value,value1,value2;//同时声明多个变量,但是这些变量的值都是undefined
 var i = 0,j = 0,k=100;//变量声明,初始化一体。
 //如果大家尝试读一个不存在的变量(值)会报错!但是尝试给一个未使用Var声明的变量赋值,javascript
 //会隐式的声明改变量,而且声明了的变量还是全局的。细节:所以大家创建变量都尽量使用Var
 //变量的作用域(这个问题也容易出,大家要搞明白)

javascript:变量的作用域
 这些都是细节,和我一样初学的一定要注意避免!


代码如下:

var golbal = "golbal"; //全局变量
 var local ="local";
function area()
 {
//局部变量的优先级比全局变量的高
var local = "arealocal"
//当函数体内声明的变量名和全局变量名相同时,javascript 会隐藏全局变量
var golbal ="areagolbal";

document.write("local is :"+local + "and golbal is :" + golbal +"<br />");
 }

area();
//输出:local is :arealocaland golbal is :areagolbal

在嵌套的函数里面定义局部变量,效果会怎么样呢?看下面:


代码如下:

var hope = "moremoney";
function createmore()
{
var hope = "have more money";//局部
function createmoreto()//嵌套函数
{
var hope = "have more money to much";//局部
document.write("Createmoreto hope is :"+hope +"<br />");
  //输出:Createmoreto hope is :have more money to much
}
 createmoreto();//调用
 document.write("Createmore hope is :" +hope +"<br />");
//输出:Createmore hope is :have more money
}
 createmore(); //调用

javascript:传值和传址
这里也是比较重要的概念!不要漏了。


















  传值 传址
复制 实际复制的值,存在不同的、独立的拷贝。 复制的只是对数字的引用。如果通过这个新的引用修改了数值,这个改变对最初的引用来说也是可见的。
传递 传递给函数的是值的独立拷贝对它的改变在函数外没有影响 传递给函数的是对数值的引用,如果函数通过传递给它的引用修改了数值,这个改变也是可见的。
比较 比较这两个对立的值,通常逐字节的比较,以判断是否相等 比较的是两个引用,以判断它们引用的是否是同一个数值。

javascript:基本类型和引用类型

javascript的基本规则是:基本类型通过传值来操作,引用类型通过传址来操作。(什么事值类型,或者什么事引用看我上一篇)
按值传递


代码如下:

var value = 1;
 var copyvalue = value; //将value赋给另一个变量
  function addTotal(total,arg)
  {
 total+= arg; //total = total + arg 效果等同
 }
 //调用函数,传两个参数(大家可能会认为这个函数改变了全局变量的值,其实没有,函数用的也是对立拷贝)
 addTotal(value,copyvalue);
 if(value == 1) copyvalue = 2;
 document.write("total \t" + value + "and copyvalue \t\t" + copyvalue+"<br />");
 //最后输出:total 1and copyvalue 2

按址传递


代码如下:

var array = new Array("Javascccp");
 var objarray = array;
 function modifyArray(arr)
 {
 arr[0] = "JAVASCRIPT";
 }
 //没调用函数前
 document.write(array[0] +"<br />");
 //输出Javascccp;
 //调用函数后
 modifyArray(array);
 document.write(array[0]+"<br />");
 //输出大写JAVASCRIPT
 //通过修改objarray会是一样的效果
 objarray[0] = "Frank";
 document.write(array[0]+"<br />");
  //输出Frank;

小结:上面内容希望大家都不要错过,对学习后面的知识还是很有帮助的!

(0)

相关推荐

  • javascript的变量、传值、传址、参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型);5种基本类型包括:undefined,null,string,boolean,number 2.函数的参数的传递的机制是复制变量值. 书上说:"把函数外部的值复制给函数内部的参数,就和把值从一个变量复制给另一个变量一样.基本类型的传递如同基本类型变量的复制一样,而引用类型的则如同引用类型变量的复制

  • JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享

    对于"JavaScript 函数参数是传值(byVal)还是传址(byRef)"这个问题,普遍存在一个误区:number,string等"简单类型"是传值,Number, String, Object, Array等"复杂类型"是传址.这样不对吗?为什么会有这样的误区?看一下这两段代码: 复制代码 代码如下: //造成传值假象的代码function modifyLikeByVal(x){  x = 1;  console.log('x = %d'

  • javascript中的变量是传值还是传址的?

    这个标题念起来有点拗口,但却是理解数据结构的关键.标题中的4个术语,对应的英文分别是:shallow copy(注意,不是shadow copy).deep copy.pass by value.pass by reference(或pass by address).传址和传引用是一回事. 一门编程语言的核心是数据结构,粗略来讲,可以把数据结构分成不可变类型(immutable)和可变类型(mutable).为什么这么分呢?这涉及到内存分配问题.对于不可变类型,只要分配有限的内存空间即可,而对于

  • JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例

    javascript:变量的声明以下是几种声明变量的方式 复制代码 代码如下: var value; var value,value1,value2;//同时声明多个变量,但是这些变量的值都是undefined var i = 0,j = 0,k=100;//变量声明,初始化一体. //如果大家尝试读一个不存在的变量(值)会报错!但是尝试给一个未使用Var声明的变量赋值,javascript //会隐式的声明改变量,而且声明了的变量还是全局的.细节:所以大家创建变量都尽量使用Var //变量的作

  • JavaScript基础篇(3)之Object、Function等引用类型

    阅读目录 Object类型 1.通过构造函数来创建 2.通过字面量表示法来创建对象 Array类型 同样Array也有两种创建方式: 如果我们想要打印数组中所有的值,直接打印数组的变量名就可以: 往数组添值: 栈方法.队列方法:  关于数组的排序:  数组的一些操作方法: 查找位置方法 迭代方法 归并方法 Date类型 RegExp类型 Function类型 三种表示法: 方法重载 函数内部属性(arguments 和 this) 基本包装类型 浏览器的内置对象 URI 编码方法 总结 我们在<

  • JavaScript 基础篇(一)

    JavaScript 基础篇(一) 基础篇 Javascript:一.数据类型和值 javascript:允许使用3种基本类型数据--------数字.字符串.布尔值,此外还支持两种小数据类型null(空)和undefine(未定义). javascript:还支持符合数据类型-对象(object),javascript中对象分两种,一种对象表示的已命名的值的无序集合,另一种表示有 编号的值的有序集合.其实有序集合就是数组(Array). javascript:还定义了另一种特殊对象----函数

  • JavaScript基础篇(6)之函数表达式闭包

    其实js支持函数闭包的主要原因是因为js需要函数能够保存数据.这里的保存数据是只函数在运行结束以后函数内变量的值也会进行保存.至于为什么js需要在函数内可以保存数据,那就是js是一种函数式语言.在函数内保存数据是函数式语言的一大特征. 回顾前面介绍过的三种定义函数方式 functiosu(numnumreturnunum//函数声明语法定义 vasufunction(numnum)returnunum}//函数表达式定义 vasuneFunction("num""num&qu

  • Javascript基础教程之变量

    javascript 中变量通过var关键字(variable)来声明的. 复制代码 代码如下: var school = "beijingyizhong" 也可以通过var 关键字给变量多个值. 复制代码 代码如下: var school = "beijingyizhong" , diqu = "beijing" , age = 100; 此外,与java不同,javascript可以在同一个变量中存储不同的数据类型.例如 复制代码 代码如下:

  • javascript 基础篇3 类,回调函数,内置对象,事件处理

    复制代码 代码如下: function 类名(参数表){ this.属性; ...... this.函数; } 这样,函数和数据成员都是用"this."来实现. 我们自己定义一个简单类student好了,然后再去构造它,并且实现一个输出函数. 复制代码 代码如下: <script LANGUAGE="JavaScript"> <!-- function student(a,b){ this.name = a; this.age=b; this.ou

  • vbscript基础篇 - vbs变量定义与使用方法

    一.申明变量 ① 显式声明:Dim.Public.Private语句进行声明 ② 隐式声明:不声明直接使用 ③ 强制声明:Option Explicit语句强制显式声明所有变量 dim name,age name="Ethon" age=27 msgbox name & age 'name="Ethon" : age=27 对多个变量赋值 注意:在VBScript中对变量.方法.函数和对象的引用是不区分大小写 '隐式申明 hello="ABC123

  • JavaScript 基础篇之对象、数组使用介绍(三)

    Javascript:对象 对象我们在前面也简单介绍过,它是一种将多个数据值集中在一个单元的东西,使用名字来存取,它是一个无序的属性集合. 1.创建对象的几种方式 复制代码 代码如下: var empty = {} //创建一个没有属性的对象. var person = {name:"ben",age:22,sex:'男'}//使用直接量创建对象 var people = {{name:'Frank',age:21},{name:'Mary',age:21},sex:'MAN'}//

  • 传智播客学习之JavaScript基础篇

    一.JavaScript与java的区别 1.JavaScript是Netscape公司的产品,Java是Sun公司的产品. 2.JavaScript是基于对象,Java是面向对象. 3.JavaScript只需解释就可以执行,Java需要先编译成字节码文件,再执行. 4.JavaScript是弱类型,Java是强类型. 小结:其实java与JavaScript除了名字上有些像以外,然后JavaScript借用了部分java思想外,其余别的几乎没有什么关系. 二.如何将JavaScript与Ht

  • 关于javascript 回调函数中变量作用域的讨论

    1.背景 Javascript中的回调函数,相信大家都不陌生,最明显的例子是做Ajax请求时,提供的回调函数, 实际上DOM节点的事件处理方法(onclick,ondblclick等)也是回调函数. 在使用DWR的时候,回调函数可以作为第一个或者最后一个参数出现,如: JScript code function callBack(result){ } myDwrService.doSomething(param1,param2,callBack);//DWR的推荐方式 //或者 myDwrSer

随机推荐