JS全局变量的疑惑???

JavaScript014

JS全局变量的疑惑???,第1张

如果你这段代码是放在<script></script>标签下的,那就是全局变量,如果是放在某个函数里面的,那就是局部变量。

js里可以这样声明变量,但是不建议这样声明,因为js中可以有好多个<script></script>,而且每一个在<script></script>里面通过var声明的变量都是全局变量,这样一来,写的人多了,如果大家都定义了var d,那么就会产生覆盖的现象。

所以一般比较建议的做法是加一个命名空间:

var dada = {}

dada.d = document.getElementById('div1')

dada.xx = function(){ dada.d.innerHTML=""}

希望我的回答能帮到你哈,有问题可以追问,觉得好就点个赞,有用就采纳!

js里面,函数作为作用域范围,在这个范围里,首先完成的过程是变量初始化和声明。也就是说,show1执行之前,内部变量已经初始化,初始化的值都是undefined。所以,第一write的s等于undefined。

js的运行顺序

步骤1. 读入第一个代码段(js执行引擎并非一行一行地执行程序,而是一段一段地分析执行的)

步骤2. 做语法分析,有错则报语法错误(比如括号不匹配等),并结束

步骤3. 对var变量和function定义做“预解析”(永远不会报错的,因为只解析正确的声明)

步骤4. 执行代码段,有错则报错(比如变量未定义)

你的例子中,一个function可以看成一个独立的作用域空间,是一个独立的代码片段,执行是,第一步是变量预解析,所以,不管s在全局变量是否存在,你那个function内部执行的时候,局部变量s已经声明,初始化了,在函数执行执行,变量会提前声明的,预解析阶段,所有变量都是undefined。你的代码实际效果是这样的:

var s

s="1"

function show1() {

var s

document.write(s+"<br>")

s="3"

document.write(s+"<br>")

}

show1()

如果这样写,就很清楚了吧,js就是这样分析代码的。