例子:调用函数 输入函数然后输出二月份的天数。
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 defined
at text.html:12*/
注意:当函数内部直接赋值而没有声明的话就是全局变量
js对象:
学习目标:
- 能够说出为什么需要对象
- 能够使用字面量创建对象
- 能够使用构造函数创建对象
- 能够说出new的执行过程
- 能够遍历对象
学习内容:
- 对象
- 创建对象的三种方式
- new关键字
- 遍历对象属性
什么是对象:对象是一个具体的事物,看得见摸得着的食物。对象是一组无序的相关属性和方法的集合,所有的事物都是对象。
属性:事物的特征 方法:事物的行为
为什么需要对象:
如果想要保存一个人的完整信息,就要使用对象比较方便
person.name=‘张三丰’
person.sex='女‘
创建对象(object)的三种方式:
-
利用字面量创建对象
var obj={};//创建了一个空的对象
- 利用new Object创建对象
- 利用构造函数创建对象