js中 为什么 全局变量在方法中无法使用

JavaScript019

js中 为什么 全局变量在方法中无法使用,第1张

我相信大多数人都是把<script>提到<head>里面去,这样以来格式工整,心情舒畅,强迫症患者酣畅淋漓。但是不幸的是html代码执行顺序是自顶向下的,如果你只是定义普通的变量类型倒无所谓,一旦涉及到Element就惨了,<body>里的元素还没被加载出来,js语句就已经执行完了。然后你测试就会发现,你定义的元素变量,全部返回null,根本没有捕获元素,但是为了代码的效率,你又不得不将getElement等语句定义为一个个全局变量以便调用,诶那咋办勒。

一般来说这就代码习惯有关了,大多数都是把<script>拉到<body>靠后位置去,这样元素就先被加载了。还有比较好的代码风格是一个元素的事件对应一个js语句来写,当然由于全局变量会被提后的缘故,靠前的代码又用不了,所以大部分代码都是写在后面的。

所以嘛,客观的来讲:

方法一:按照自顶向下加载的顺序合理排列js语句。

方法二:用window.onload自行设定加载顺序。(逃

if ( statu = 3) 所有if判断后面的条件都写错了,判断是用双等于‘==‘ 或值和类型都比较的用三等号’===‘;单等号是赋值。还有事件没有必要绑2次,可以把li上的去掉,修改或的代码:

<body>

<ul class="list-inline nav_list">

<li><a href="###" onclick="caseclick()">案例</a></li>

<li><a href="###" onclick="orbclick()">服务</a></li>

<li><a href="###" onclick="aboutclick()">关于</a></li>

<li><a href="###" onclick="contactclick()">联系</a></li>

</ul>

<script type="text/javascript">

var statu = 3

var whosnext = function () {

if (statu == 3) {

//aboutout()

console.log(statu)

} else if (statu == 2) {

//orbout()

console.log(statu)

} else if (statu == 4) {

//contactout()

console.log(statu)

}else {

//caseout()

console.log(statu)

}

}

var aboutclick = function () {

whosnext()

statu = 3

//aboutin()

}

var contactclick = function () {

whosnext()

statu = 4

//contactin()

}

var orbclick = function () {

whosnext()

statu = 2

//orbin()

}

var caseclick = function () {

whosnext()

statu = 1

//casein()

}

</script>

</body>