因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。
JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用。它允许变量不声明就可以访问,或声明在后使用在前。
新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑。但在 ES6 加入 let/const 后,变量Hoisting 就不存在了。
依次取出来了,剩下的就是按你的要求分别处理了<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<script>
function a(v){
var lst = []
lst = v.split(',')
for( var i = 0i <lst.lengthi ++ ){
alert(lst[i])
}
}
</script>
<BODY>
<input type="text" onblur="a(this.value)">
</BODY>
</HTML>
js再执行前,会先编译一遍,编译过程中,在后面定义的变量就相当于在前面定义了,这个是js特有的属性,如果不了解,尽量别随便用,很容易赋值时弄错了。ecs6引进了let命令,与传统的var相比,let是局部变量,超过大括号以外就失效,而var则是一旦定义,任何地方都可以使用。其实只要你的代码书写规范。完全可以避免变量混淆,随意声明的问题。