`
WODE890502
  • 浏览: 9362 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

js变量初始化声明

 
阅读更多
就是js可以不声明就给初始化,那样就是一个全局变量了
如i=1;i就是一个全局变量,这样方便程序员写很长的代码时又要跳到开头声明个全局变量,就直接在使用的地方用i=1;(其实这样代码不大很看,不方面阅读)
正常写法是var i;你可以重复声明并初始化一个变量,效果只不过是重新赋值。
变量的作用域:

与其他高级语言一样,js分全局变量和局部变量。所谓局部就是函数内的变量。局部变量的优先级比全局高,因为我的地盘我做主。切记局部变量声明要用var。不用var的结果就是之前说的蛋疼玩意。



再次强调声明变量要用var,否则在函数操作变量的时候如果使用了全局变量就会有改变程序的其他部分所使用的值的危险。



js没有块级作用域。大概是比如一个if(){块级作用域}。这与C、C++、JAVA不同。

因此在一个函数中声明的变量在整个函数中都是有定义的。参看如下代码:

function test(o) {

var i = 0;

if (typeof o == 'object') {

  var j = 0;

  for (var k = 0; k < 10; k++) {

   document.write(k);

  }

  document.write(k);

}

document.write(j);

}

在java中,这样的代码会报错,因为for循环外面 的两个语句对k和j的访问都会出错。但是在js中不会。即使你在if(){}中声明了变量,但是在整个函数里,这个被声明的变量都是可见的。不过如果在{}外面,那么这个访问变量它的值会是undefined。如果我们再添一行test(1); 这段代码在浏览器里的结果是undefined。

注意:未定义的话js不会报错,因为默认值是undefined。而未声明的话会代码报错无法执行。



再来一个例子:

var scope='global';

function f() {


alert(scope);

var scope='local';

alert(scope);

}

f();

它的结果会让你大吃一斤。因为它的结果跟如下代码没有区别:

function f () {


var scope;

alert(scope);

scope='local';

alert(scope);

}

这两个例子说明了为什么将所有变量声明集中起来放置在函数的开头是个好的编程习惯。我觉得还得加一条,最好别搞什么同名变量。否则如果js理论不是很精通的话很容易出现一些让人匪夷所思的问题。比如这个例子



顺便说一下,js的变量与对象里的属性基本上是一样的。


分享到:
评论

相关推荐

    【JavaScript源代码】如何在JavaScript中正确处理变量.docx

    两者之间的主要区别是 const 变量在声明时需要初始化,并且一旦初始化就无法再重新赋值。 // const 需要初始化 const pi = 3.14; // const 不能被重新赋值 pi = 4.89; // throws "TypeError: Assignment to ...

    javascript变量声明实例分析

    本文实例讲述了javascript变量声明的方法。分享给大家供大家参考。具体分析如下: js中使用一个变量之前应当先声明。变量使用关键字var来声明。 如果未在var声明语句中给变量指定初始值,则该变量值为undefined。 ...

    JavaScript变量知识简介

    2. 变量的声明、初始化和赋值 ~变量的申明 – 在JavaScript中,申明变量以var关键字,空一格再接变量的名字; – 可以一次申明多个变量,var出现一次,多个变量名之间用英文逗号隔开。 var a; var b1,b2,b3; ~变量...

    JavaScript 变量提升 | 执行上下文 | 作用域

    文章目录变量提升执行上下文全局执行上下文函数执行上...变量的提升只会把声明提升,但是初始化不会提升,也就是说可以输出a,但是a = 5却没有输出出来。 函数可以先使用后声明。 变量提升会把function声明的全局函

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

    //变量声明,初始化一体。 //如果大家尝试读一个不存在的变量(值)会报错!但是尝试给一个未使用Var声明的变量赋值,javascript //会隐式的声明改变量,而且声明了的变量还是全局的。细节:所以大家创建变量都...

    JavaScript变量提升和严格模式实例分析

    本文实例讲述了JavaScript变量提升和严格模式。分享给大家供大家参考,具体如下: 1.什么是变量提升 所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被”提升”到方法体(作用域)的最顶部。 下面我们...

    JavaScript中的变量声明早于赋值分析

    实际有两个步骤: 1 初始化a为undefined 2 a赋值3 因此会出现一些“匪夷所思”的现象,即JS中变量可以先使用后声明。这在Java中是不允许的。 代码如下:System.out.println(a); int a = 1; 编译通不过。但JS可以,...

    深入理解JS中的变量及作用域、undefined与null

    局部变量的声明周期从函数被调用执行开始初始化,在函数调用执行完毕之后被销毁。 2、全局变量和作用域 全局变量一般在函数体外面声明: var i=12;//全局变量 function func(){ ...... } 还有一种没有声明而直接...

    浅析JavaScript中的变量复制、参数传递和作用域链

    JS中规定,通过var声明的变量会被添加到最近的环境中,如果声明并且初始化一个变量没有用到var关键字,这个变量会被添加到全局环境中。  关于复制变量值,因为变量的类型不同复制的过程也不同。如果变量是一个基本...

    Go语言的变量、函数、Socks5代理服务器示例详解

    // 声明并初始化一个变量 var m int = 10 // 声明初始化多个变量 var i, j, k = 1, 2, 3 // 多个变量的声明(注意小括号的使用) var( no int name string ) // 声明时不指明类型,通过初始化值来推导 var b = true ...

    JavaScript中用let语句声明作用域的用法讲解

    语法 let variable1 = value1 ...如果未在 let 语句中初始化您的变量,则将自动为其分配 JavaScript 值 undefined。 示例: var l = 10; { let l = 2; // At this point, l = 2. } // At this poin

    js二维数组定义和初始化的三种方法总结

    方法一:直接定义并且初始化,这种遇到数量少的情况可以用 var _TheArray = [[“0-1″,”0-2”],[“1-1″,”1-2”],[“2-1″,”2-2”]] 方法二:未知长度的二维数组 var tArray = new Array(); //先声明一维 for...

    JavaScript权威指南(第6版) 英文版

    4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 算术表达式 69 4.9 关系表达式 74 4.10 逻辑...

    javascript 中null和undefined区分和比较

    在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined , 例如: var message; alert&#40;message == undefined&#41;; //true 这个例子只声明了变量 message ,但未对其进行初始化。比较这个变量...

    JavaScript权威指南-第六版

     4.2 对象和数组的初始化表达式61  4.3 函数定义表达式62  4.4 属性访问表达式63  4.5 调用表达式64  4.6 对象创建表达式64  4.7 运算符概述65  4.8 算术表达式69  4.9 关系表达式74  4.10 逻辑表达式79  ...

    java源码结构-FCC-JavaScript-Algorithms-and-Data-Structures-Certification:完成

    声明JavaScript变量 使用赋值运算符存储值 将一个变量的值分配给另一个 用赋值运算符初始化变量 了解未初始化的变量 了解变量中的区分大小写 用JavaScript加两个数字 用JavaScript减去一个数字 使用JavaScript将两个...

    JavaScript权威指南(第6版)中文

    4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 算术表达式 69 4.9 关系表达式 74 4.10 逻辑...

    ECMAscript 变量作用域总结概括

    ECMAScript的变量是松散类型的,即可以用来保存任何类型的数据(未经初始化的变量,会保存一个特殊值undefined). 未使用var操作符声明 function test() { message='hi'; console.log(message); } console.log...

    JS温故而知新之变量提升和时间死区

    并且在此阶段,它只会扫描并且抽出环境中的声明变量,声明函数以便准备分配内存,所有的函数声明和变量声明都会被添加到名为Lexical Environment的JavaScript内部数据结构内的内存中。因此,它们可以在源代码中实际...

Global site tag (gtag.js) - Google Analytics