js变量及其作用域

Javascript和Java、C这些语言不同,它是一种无类型、弱检测的语言。它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量

一、js变量的类型及申明方式

var i=100;//Number类型

var i="variable";//String类型

var i=false;//boolen类型

var i={x:4};//Object类型

var i=[1,2,3];//Array类型

前三种是基本类型,后两种为引用类型

1.引用类型相对基本类型可以为其添加属性方法

2.基本类型被复制于另一个变量时,会在该变量对象创建一个新值,然后把值复制到为新变量分配的位置上,而引用类型引用的都是同一个对象。

JS中变量申明分显式申明和隐式申明。

var i=100;//显式申明 
i=100;//隐式申明 
在函数中使用var关键字进行显式申明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。   
当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。

二、js变量作用域

js变量作用域可分为:"全局变量"和"局部变量"

"全局变量":申明在函数之外的变量

"局部变量":申明在函数体中的变量,并且只能在当前函数体内访问,如:function(){var a = 0;}

注:在申明变量是凡是没有var关键字,而直接赋值的变量均为全局变量

示例:

下面就通过几道小例子来熟悉下

1、function test() {

a = 30;

var b = 20;

}

test();

console.log("a="+a); //这里很明显,a为全局变量

console.log("b="+b);//b为局部变量,故在函数test外调用是,提示未定义

2、

var a = 1;

function test() {

console.log("a="+a); //这里a为undefined

/*函数中声明的变量在整个函数中都有定义。如果函数内部有定义变量,即使在定义之前输出但会先执行后面定义语句,然后判断输出结果,所以说声明的变量在整个函数中都是起作用的。*/

var a = 2;

}

test();

3、

给两个小例子作为对比:

var a; function fun() { a = "global"; } console.log(a);//输出undefined

var a; function fun() { a = "global"; }

fun();console.log(a);//输出 global

对于上面这两个小例子,它们唯一的区别就是一个执行了fun函数,一个没有执行;

如果就是

var a;console.log(a);//由于a只定义,但没初始化,故输出undefined

而function fun(){...}中对a进行初始化,初始化操作实在fun函数作用域内,如果不执行fun()那么初始化操作也不会执行

4、函数域优先于全局域,故局部变量a会覆盖掉全局变量a

var a=1;

function main(){

var a=2;//局部变量

console.log(a);//2

}

main();

console.log(a);//1

5、javascript没有块级作用域

function test(){

for(var i = 0 ; i < 3 ; i++){

//i=0,1,2,最后执行到i=3时退出循环

}

console.log(i);//3

}

test();

相当于

function test(){

var i;

for(i = 0; i < 3; i++){

//i=0,1,2,最后执行到i=3时退出循环

}

console.log(i);//3

}

test();

时间: 2024-12-09 19:28:25

js变量及其作用域的相关文章

详解js变量、作用域及内存

详解js变量.作用域及内存 来源:伯乐在线 作者:trigkit4 原文出处: trigkit4 基本类型值有:undefined,NUll,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,他们的值保存在栈空间,我们通过按值来访问的. JavaScript 1 2 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数. 如果赋值的是引用类型的值,则必须在堆内存中为这个值分配空间.由于这种值的大小不固定(对象有很多属性和方

js变量及其作用域(附例子及讲解)

Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量 工具/原料 Chrome 浏览器(以下代码测试均由Chrome调试) 方法/步骤 js变量的类型及申明方式等等,本文不再说明,读者可以参考相关官方文档 这里主要介绍js变量及其作用域 js变量作用域可分为:"全局变量"和"局部变量" "全局变量":申明在函数之外的变量 &q

JS变量、作用域、 内存(含 预解析面试题)

一.变量 1. 变量 命名: 变量名以$.字母.下划线开头 驼峰命名法 变量名要有意义 2. 变量 声明 声明多个变量:var message, name, age; 重复声明无效,只看第一次声明[特殊:函数内形参 与 函数内的函数名(函数声明方式创建的函数) 重名,以函数名声明为准] <script> console.log(typeof a); function a() {} var a = 10; </script> // 输出:function <script>

js变量的作用域详解

JavaScript中的变量作用域问题对一些初学前端的人来说可能是一个很头疼的问题,但是我相信,等你看完这篇文章之后你会有一个相对明确的理解 首先,我们来看看下面的两段代码输出结果分别是什么. 代码一: var a = 1; function func(){ var a; alert(a); a = 2; alert(a); } func(); 代码二: var a = 1; function func(){ alert(a); a = 2; alert(a); } func(); 这里就涉及到

JS 变量的作用域

变量的作用域,是指变量的作用范围.也就是说,变量只在特定范围有效,超出该范围无效. 在JavaScript中,有两种变量,全局变量和局部变量: 全局变量:可以在脚本中的任何位置被调用,全局变量的作用域是当前文档中整个脚本区域. 局部变量:只能在此变量声明语句所属的函数内部使用,局部变量的作用域仅为该函数体. 声明变量时,要根据编程的目的决定将变量声明为全局变量还是局部变量.一般而言,保存全局信息(如用户信息.菜单选项等)的变量需声明为全局变量,而保存临时信息(如待输出的格式字符串.数学运算中间变

js变量的作用域问题

1 var tt = 'www.cqcqing.com'; 2 function test(){console.log(tt);} test(); 控制台显示为:www.cqcqing.com 1 var tt = 'www.cqcqing.com'; 2 function test(){ 3 console.log(tt); 4 var tt = 'www.cqcqing.com'; 5 console.log(tt); 6 } 7 test(); 控制台显示为:undefined      

js:变量,作用域以及内存问题

最近在重读<javascript高级程序设计>这本书,"温故而知新",古人诚不欺我,再看的时候发现很多知识是之前不理解便跳过的,也有很多之前只是知道并记住了,并不能形成一套体系,而不断的回顾,不断地总结,我发现有很多零零散散的知识点在不经意间就被串在了一起,恍然大悟的感觉甚是美妙 而我一向喜欢思维导图和记忆的方式去学习总结,在用文字表达和总结方面显得很贫乏,所以打算用这种博客的形式来记录下重读过程中的总结,就当是记个笔记,也顺便练练表达能力 变量: js中的变量可能包含两种

js 变量和作用域

1.基本类型和引用类型的值 在js中,变量可能包含两种不同数据类型的值,基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 1.1.动态的属性 定义基本类型值和引用类型值得方式是类似的,创建一个变量并且为该变量赋值.但是,当这个值保存到变量中以后,对不同类型值可以执行的操作,对于引用类型的值,我们可以对其添加属性和方法.也可以改变和删除其属性和方法. var person = new Object(); person.name = 'Tom';

js变量的作用域

1.js函数声明和函数表达式的区别 Js中的函数声明是指下面的形式: function a(){} js中的函数表达式是指下面的形式: var a=function(){} js的解析器对函数声明与函数表达式并不是一视同仁地对待的. 对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析 所以在实际中,它们还是会有差异的,具体表现在,当使用函数声明的形式来定义函数时,可将调用方式在函数声明之后,而