一、如果是在网页直接写js代码,则在HTML中嵌入如下标签
<script language='javascript'>
// js代码
<script>
二、如果是外部js文件,则在HTML标签<head></head>之间嵌入如下标签
<script src="外部文件路径/js文件" language="javascript"></script >
例如:
<script src="baobiao/js/CalendarSelector.js" language="javascript"></script >
是这样的,在js的解释器(编译机制)里的规则是这样的
在作用域中的变量声明和方法声明都会呗编译器在编译的时候,
给强制挪到第一行,在开始执行,并且变量的默认值都是 `undefined`
比如:
(function(){//这是一个独立作用域
var i = 0
var a = 1
alert(i + a)
})()
经过编译后的代码可能会类似这样
(function(){var i , a//变量的声明会挪到首行,并且变量默认赋值为`undefined`
i = 0
a = 1
alert(i + a)
})()
也会有这种情况
(function(){alert(a)
test()
var a = 1
function test(){
alert('test fn')
}
})()
编译后的代码:
(function(){var a
function test(){//方法会直接挪到代码前
alert('test fn')
}
alert(a)
test()
a = 1
})()
所以你会发现,定义的方法,在代码的任何位置都可以调用,就是这个原因,因为编译后的代码,不管你的方法定义在那里,都会帮你挪到首行
另外,你那里的变量,作用域的问题的规则是这样的
如果同名的变量,那么局部作用域的变量优先于外部变量
var a = 1 //这是一个外部定义的变量(function(){
alert(a)
var a = 2//在这里,又使用`var`声明了一次 `a`,
//那么这个变量就会覆盖在外面定义的变量`a`
})()
编译后的结果将是这样
var aa = 1
(function(){
var a//这里的a就会覆盖外面的变量a,并且编译器会默认赋值undefined
alert(a)//所以这里就会弹出undefined了
a = 1
})()
当人,如果内部没有用`var`声明这个变量,那么外部作用域和内部的作用域就会使用同一个变量
比如这样
var a = 1(function(){
alert(a)//这样这个方法在自己的作用域中无法找到变量`a`,就会去父作用域找变量`a`
//如果还没找到,就在往父作用域中找,这样直到找到为止
//或者一直找到global(全局作用域)还没找到变量`a`,
//就会抛出一个异常(也就是报错) 'ReferenceError : `a` is not defined'
})()
<script type="text/javascript">var wait=60
function time(o) {
if (wait == 0) {
o.removeAttribute("disabled")
o.value="免费获取验证码"
wait = 60
} else {
o.setAttribute("disabled", true)
o.value="重新发送(" + wait + ")"
wait--
setTimeout(function() {
time(o)
},
1000)
}
}
document.getElementById("btn").onclick=function(){time(this)}
</script>
把这段js放上,btn是input的id,换成你自己的id名就可以了