//案例,用户输入年份,输出当前年份2月份的天数functiongetmonth(){var year =prompt('请输入一个年份:');if(getyear(year)){//调用判断闰年的函数,是闰年则返回truealert('当前年份是闰年,2月份有29天');}else{alert('当前年份是平年,2月份有28天');}}functiongetyear(year){//判断是否为闰年的函数var flag =false;if(year %4==0&& year %100!=0|| year %400==0){
flag =true;}return flag;}
//案例1,结果是几functionf1(){var num =123;functionf2(){
console.log(num);//站在目标出发,一层一层的往外找}f2();//执行num,离f2最近的是f1内的num的值}var num =456;f1();//输出123//2、案例:结果是几var a =1;functionfn1(){var a =2;var b ='22';fn2();functionfn2(){var a =3;fn3();functionfn3(){var a =4;
console.log(a);//最近的是fn3中a的值
console.log(b);//最近的是fn1中b的值}}}fn1();//输出a的值为数值4,输出b的值为字符串22
5.预解析
js引擎运行js分为两步:预解析 代码执行
预解析,js引擎会把js里面所有的var 还有function 提升到当前作用域的最前面
代码执行,按照代码书写的顺序从上往下执行
预解析分为 :变量预解析(变量提升)和函数预解析(函数提升)
变量提升,就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数
相关案例:
// 案例2,结果是几/* var num = 10;
function fn() {
console.log(num);
var num = 20;
console.log(num);
}
fn(); *///执行var num;functionfn(){var num;
console.log(num);//就近原则,执行的是var num,未赋值
num =20;
console.log(num);//就近原则,执行的是num = 20}
num =10;fn();//先输出第一个num,未赋值undefined,再输出第二个num,值为20
// 案例3,结果是几/* var a = 18;
f1();
function f1() {
var b = 9;
console.log(a);
console.log(b);
var a = '123';
} *///执行var a;functionf1(){var b;var a;
b =8;
console.log(a);//就近原则,执行的是var a,未赋值
console.log(b);//就近原则,执行的是var b
a ='123';}
a =18;f1();//先输出a,未赋值undefined,再输出b,值为8
6.对象
现实生活中,万物皆对象 在js中,一切皆对象
对象:无序的集合,由“属性”与“方法”构成
6.1创建及调用对象
创建对象:利用对象字面量创建一个对象
var obj ={
usename:'小丁',
age:'27',
sex:'男',eat:function(){
console.log('小丁超能吃');}}//(1)里面的属性或者方法采用的是键值对的形式 键(属性名):值(属性值)//(2)键和值之间用冒号分开,方法的冒号后面跟的是一个匿名函数//(3)多个属性或方法用逗号隔开
/* for (k/key in 对象名字) {
在此执行代码
} */var obj ={
name:'jack',
age:18,
gender:'male',fn:function(){}}for(var k in obj){
console.log(k);//这里的k是属性名
console.log(obj[k]);//这里的obj[k]是属性值}
1.Arguments在不确定有多少个参数传递的时候,用arguments来获取在任意一个函数内部,都有一个看不见的 arguments,arguments展示形式是一个伪数组arguments的内部的元素就是函数的实参列表伪数组并不是真正意义上的数组,它具有数组的length属性,能够按照索引的方式进行存储,有索引号,它没有真正数组的一些方法案例: //3、利用函数对数组进行排序 function sort(arr){ for(var i = 0;