函数之家可以相互进行调用
- //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
- }
function fn(){
}
fn()
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')
- }()
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)
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);
- }
对象是一组无序的相关属性和方法的集合,所有事物都是对象,比如字符串、数值、数组、函数等等
对象是有方法和属性组成的
- 属性:事物的特征,在对象中用属性来表示
- 方法:事物的行为,在对象中用方法来表示
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']);