JavaScript:事件驱动
- 所有的事件句柄都是以标签的属性形式存在的。比如:
<input type="button", value="hello",onclick = "事件触发代码">
- 事件监听器一直在监听事件什么时候发生;事件发生则由浏览器执行事件触发代码
1. JS嵌入三种方式
- 行间事件:直接在事件句柄【标签属性】后面写入js代码。如:
<input type="button" value="hello" onclick="window.alert('hello world');">
- 页面script标签嵌入【脚本块】:在script标签中直接写js代码,页面打开时自上而下的顺序依次执行这些代码
<!--脚本块-->
<script>
/* 这里直接编写js代码,页面打开时自上而下的顺序依次执行 */
alert("hello")
</script>
- 引入外部独立的js文件:从外部导入js文件。和上一条一样,依旧是自上而下的顺序依次执行这些代码【注意,这种方式下在标签之间写的js代码会被忽略!】。如:
<script src="js1.js"></script>
2. 标识符
只能由数字、字母、下划线和美元符号组成,但不能以数字开始。严格区分大小写,关键字不能作为标识符
3. 变量
- 格式:
var i = 100;
- js是一种弱类型语言【C和Java都是强类型语言】,没有编译阶段,直接浏览器打开解释执行。js声明变量时不需要指定变量的数据类型,变量的数据类型是可变的【赋什么值就是什么类型】
- 声明了变量,但变量不赋值时默认值为undefined
- 不声明变量直接使用会报错
4. 函数
- 格式1:
function 函数名(形式参数列表) { 函数体; }
- 函数的实参可以不按函数定义的形参数传入。少写的参数默认补上undefined,多写的参数忽略
function sum(a,b) {
alert(a + ',' + b);
}
sum();
sum(1);
sum(1,2);
sum(1,2,3);
- 格式2:
函数名 = function(形式参数列表) { 函数体; }
效果等同格式1
<script>
welcome = function (username) {
alert('welcome,' + username);
}
</script>
<!--实现点击按钮后出现 welcome,zhangsan 弹窗-->
<input type="button" value="hello" onclick="welcome('zhangsan');">
- 虽然js语句顺序执行,但函数声明的优先级较高,即使函数调用语句在声明之前也可以正常执行
- js没有函数重载【函数名一样,形参不同,内容不同】,而是新的函数“顶替”掉旧函数【出现同名函数,前面旧的函数消失】
5. 局部变量和全局变量
- 全局变量:在函数体之外声明的变量,浏览器打开的时候分配空间,浏览器关闭的时候销毁
- 局部变量:在函数体当中声明的变量,函数调用时分配空间,函数执行结束后释放内存
- 若变量声明的时候没有使用关键字,则一律被视为全局变量,如
name = "zhangsan;
当然如果只是写了变量名却不初始化,也会报错,如name;