例子:调用函数 输入函数然后输出二月份的天数。
function isRunYear(year) {var flag = false;if ((year % 4 == 0 && year % 100 !== 0) || year % 400 == 0) {flag = true;}return flag;}function backDay() {var year = prompt("请你输入年份");if (isRunYear(year)) { //当上一个函数的值为true的时候 则if内的条件成立alert("当前年份是闰年 2月份有29天");} else { //当函数值为false的时候,if内的值是false,alert("当前年份是平年,二月份有28天");}}backDay();
函数的两种声明方式:
var fun=function(){console.log("我是函数表达式");} //定义函数fun();//调用函数 第一种function fn(){}fn(); //第二种
注意:
- fun是变量名,不是函数名。
- 函数表达式声明方式跟声明变量差不多。只不过是变量表达式里面存的是值,函数表达式里面存的是函数
- 函数表达式也可以进行传递参数
js作用域:
- 能够说出js的两种作用域
- 能够区分全局变量和局部变量
- 能够说出如何在作用域中查找变量的值
学习内容:
- 作用域
- 变量的作用域
- 作用域链
作用域:限定这个名字的可用性的代码范围就是这个名字的作用域,作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。为了提高程序的可靠性。
作用域的范围(es6):现阶段是es5,分为全局作用域以及局部作用域。
全局作用域:整个script标签或者是单独的 js文件
局部作用域:在函数内部就是局部作用域,这个代码的名字只在函数内部起效果和作用
变量根据作用域的分类:根据作用域 不同,分为全局变量和局部变量。
全局变量:在全局作用域下的变量,在全局下都可以使用
注意:如果函数内部,没有声明直接赋值的变量也属于全局变量
局部变量:在局部作用下的变量,在函数内部的变量就是局部变量
注意 函数的形参也可以看作是局部变量。
从执行效率上看,全局变量在浏览器关闭的时候才会销毁,比较占内存资源
局部变量,当我们程序执行完毕就会销毁,比较节约内存资源
(js中没有块级作用域,js是在es6的时候新增的块级作用域。 块级作用域{})
作用域链:
只要有代码就会有作用域,函数内部叫局部作用域,如果函数内部中还有函数,那么这个作用域中又可以诞生一个作用域。
内部函数可以访问外部函数的变量,用链式查找决定那些数据能被内部函数访问,就称为作用域链。
例子:作用域链查找遵循 就近原则
js预解析:
- 能够知道解析器运行js分为哪两步骤
- 能够说出变量提升的步骤和运行过程
- 能够说出函数提升到步骤和运行过程
学习内容:
- 预解析
- 变量预解析和函数预解析
- 预解析案例
预解析:
//2问console.log(num);var num = 10; //undefined 坑1//相当于执行了以下:var num;console.log(num);//3问 为什么可以在函数上面调用fn();function fn() {console.log(11);}//4问fun(); //报错 坑2 为什么不可以在函数上面调用 var fun = function() {console.log(22);}// 相当于执行了以下代码var fun;fun();fun=function(){console.log(22);}//函数表达式,调用必须写在函数表达式的下面//1.js是由浏览器中的js解析器来执行的,js解析器在运行js代码的时候分为两步:预解析和代码执行//(1)预解析:js引擎会把里面所有的 var 还有 function 提升到作用域的最前面//(2)代码执行 ,按照代码执行的顺序从上往下执行//2.预解析分为变量预解析(变量提升)和函数预解析(函数提升)//(1)变量提升就是把所有的变量声明提升到当前的 作用域的最前面,不提升赋值操作//(2)函数提升就是把函数所有的声明提到作用域的最前面 不带用函数
案例:全局变量的使用以及预解析
f1();console.log(c);console.log(b);console.log(a);function f1() {var a = b = c = 9; //相当于 var a=9;b=9;c=9; b和c前面没有var 则当全局变量看console.log(a);console.log(b);console.log(c);}//相当于以下代码function f1() {var a;a = b = c = 9;console.log(a);console.log(b);console.log(c);}f1();console.log(c);console.log(b);console.log(a);/*9
text.html:28 9
text.html:29 9
text.html:10 9
text.html:11 9
text.html:12 Uncaught ReferenceError: a is not definedat text.html:12*/
注意:当函数内部直接赋值而没有声明的话就是全局变量
js对象:
学习目标:
- 能够说出为什么需要对象
- 能够使用字面量创建对象
- 能够使用构造函数创建对象
- 能够说出new的执行过程
- 能够遍历对象
学习内容:
- 对象
- 创建对象的三种方式
- new关键字
- 遍历对象属性
什么是对象:对象是一个具体的事物,看得见摸得着的食物。对象是一组无序的相关属性和方法的集合,所有的事物都是对象。
属性:事物的特征 方法:事物的行为
为什么需要对象:
如果想要保存一个人的完整信息,就要使用对象比较方便
person.name=‘张三丰’
person.sex='女‘
创建对象(object)的三种方式:
-
利用字面量创建对象
var obj={};//创建了一个空的对象 - 利用new Object创建对象
- 利用构造函数创建对象