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就是这样分析代码的。