1、函数的调用
函数之家可以相互进行调用
//1-函数可以相互调用
function fn() {
console.log(111);
fn1()//在fn中调用了fn1函数
}
fn();
function fn1() {
console.log(22);
}
fn1()
案列展示: 根据用户输入年份,输出当年2月份的天数
//案列-根据用户年份输出2月份天数
function backDay() {
var year = prompt('请输入年份:');
if (isRun(year)) {
alert('当前年份是闰年,2月份有29天!')
} else {
alert('当年是平年,2月份有28天!')
}
}
backDay();
function isRun(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag
}
2、函数的两种声明方式
(1)利用函数关键字自定义函数(命名函数)
function fn(){
}
fn()
(2)函数表达式(匿名函数)
var 变量名=function(){}
//4.2没有名字的函数
(function () { console.log(123) }
)();//加括号执行
//4.3
(function () {
console.log(345)
}())
+ function () {
console.log('thr')
}()
- function () {
console.log(666)
}()
~function () {
console.log(000)
}()
!function () {
console.log('xxh')
}()
3、作用域
1、作用域:代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是为减少命名冲突
2、js的作用域分为:全局作用域和局部作用域
3、全局作用域:整个js标签或是一个单独的js文件;
4、局部作用域:在函数内部就是局部作用域,只在函数内部起效果和作用
变量作用域
变量的作用域:
分为全局变量和局部变量
注意:
如果函数内部没有声明变量 var,则用的是全局变量;如果在函数内部里声明了变量则不会使用全局变量;
//作用域【全局变量和局部变量】;局部作用域可以拿到全局作用域的值
var num = 123
function fn() {
var num = 1;
num1 = 123
return num;
}
fn()
var result = fn()
// //全局作用域拿不到局部作用域的值
console.log(result)
console.log(num1)
console.log(num)
4、预解析
JavaScript运行分为两步:预解析和代码执行
1、js中预解析会把js里所有的var 还有function提升到当前作用域的最前面
2、代码执行,根据书写顺序从上往下执行
3、预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升:就是把所有的变量声明提升到当前作用域最前面,不提升复制操纵
(2)函数提升:把所有函数声明提升到当前作用域最前面,不调用函数。
//案列展示:
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
5、对象
(1)对象定义
对象是一组无序的相关属性和方法的集合,所有事物都是对象,比如字符串、数值、数组、函数等等
对象是有方法和属性组成的
- 属性:事物的特征,在对象中用属性来表示
- 方法:事物的行为,在对象中用方法来表示
(2)创建对象的三种方式
1、对象字面量: {}
(1)里面属性或方法用键值对的形式 键 属性吗:值 属性值
(2)多个属性/方法中间用逗号隔开
(3)方法冒号后面跟的是一个匿名函数
(4)使用对象:调用对象的属性—对象名.属性名或者是通过对象名['属性名']
调用对象的方法: 对象名.方法名()
var obj = {
uname: 'xxh',
age: '18',
sex: '女',
sayHi: function () {
console.log('hello!');
}
}
//调用对象/方法
console.log(obj.uname);
console.log(obj['age']);
obj.sayHi();
2、通过new object 创建对象
(1)利用等号=赋值的用法 添加对象的属性和方法
(2)每个属性和方法之间用分号结束
调用方法同上
var obj = new Object()//创建一个空对象
obj.uname = 'hhh';
obj.age = 20;
obj.sayHi = function () {
console.log('Hi!!!');
}
console.log(obj.uname);
console.log(obj['age']);
obj.sayHi();
3、利用构造函数创建
语法格式:
function 构造函数名(){
this.属性=值;
this.方法=function(){}
}
new 构造函数名();
(1)构造函数名首字母要大写
(2)构造函数不需要return就可以返回结果
(3)调用构造函数时必须使用new
(4)属性和方法前面必须添加this
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
}
var obj = new Star('小he', 20, '女');
console.log(obj.name);
console.log(obj['age']);