JavaScript基础

1-0基本知识

1-1 函数

1-1-1 函数的定义

  • 函数声明
    function fn(){ }
    函数声明的函数可以再任意地方使用

  • 函数表达式
    var fn = function(){ }
    函数表达式定义的函数只能在定义之后使用

1-2-1 函数返回值

  • 有返回值
     function fn(){
       return 100 ;
     }
     var num = fn() ;    //num值等于fn函数的返回值100
  • 没有返回值
        function fn(){ }
        var num = fn()    //num值等于undefined,函数没有返回值则默认是undefined
  • 当返回值是一个函数
      function fn(){
          return function(){
              console.log( 100 );
          }
      }
      var f = fn()     //f得到的是一个函数function(){ console.log(100) }
      //既然f是一个函数,那么就可以调用
      f()   //执行return 后面的函数,打印了100

1-2-2 函数的参数

//a和b是sum函数的形参,用来接收实参
function sum( a , b ){
  var c = a + b ;
  return c ;
 }

//1和2是实参,传入1,2之后函数的形参接收,a接收1,b接收2
sum( 1 , 2  ) ;    //调用函数之后,此刻sum(1,2)整体就等于返回值

//实参个数比形参个数少
function fn( a , b ){
    var c = a + b ;
    return c ;
}
console.log(fn(1));  //undefined

//实参个数比形参个数多
function fn( a , b ){
    //arguments是伪数组,具有数组的特点,不具备数组的操作方法
    var c = a + b + arguments[2] ;
    return c ;
}
console.log(fn(1,2,3));  //6

1-2 预解析和变量声明提升

  • 所谓 预解析 指的就是在执行之前对代码的分析, 检查看是否有错误, 然后对变量进行提升.
    因此在预解析的时候, js 引擎做了两件事项, 1> 检查语法是否有问题; 2> 提升声明.

1-2-1 预解析的过程

1> 当浏览器打开后, 会读取 html 等文件, 同时读取 js 的代码, 以字符串的形式进行读取.
2> 在浏览器内部有一个被称为 js 引擎的东西( v8 引擎 ), 它会读取该字符串, 并将其解析成可以执行的代码.
javascript 引擎就是将 js 形式的字符串转换为可以使用的代码, 可以执行的代码的应用程序.
3> 在解析的过程中, 首先会将代码通篇读取一遍, 这个就是预解析
在 预解析过程中检查错误, 出现错误就会报错( 注意不是异常 )
同时会将 所有的声明记录下来.
4> 在预解析没有问题的时候, 才会从头开始一步一步的解释执行代码.

1-2-2 声明

声明的含义原本是说, 告知已让大家都知道有什么存在.
在 js 中 什么是声明呢?
-  变量
-  函数

变量的声明是让计算机在使用某变量的时候, 知道用什么东西
函数的声明是让计算机在调用函数的时候, 知道执行什么代码
变量的声明只会提升变量名不会提升变量值
函数声明的时候会提升函数名和函数体(函数表达式属于变量声明只提升变量名不提升函数体)

  • 预解析阶段出错
//首先预解析,发现浏览器不认识fuction
//console.log不会打印因为在预解析阶段就出错了
//将错误信息输出到控制台
console.log(1);
fuction fn(){   }
  • 执行阶段出错
//首先预解析,发现浏览器不认识fuction
//console.log不会打印因为在预解析阶段就出错了
//将错误信息输出到控制台
console.log( fm );
function fn(){   }
  • 全局变量与局部变量
var num = 10 ;
function fn(){
    console.log( num );   //10
    num = 20 ;
};
fn() 

var num = 10 ;
function fn(){
    console.log( num );   //undefined
    var num = 20 ;
};
fn() 

1-3 递归

1-3-1 递归的定义

一个函数直接或间接调用自身

  • 直接调用自身

    function fn(){
    console.log( '我是fn函数' );
    fn()
    }
    fn() ;
  • 间接调用自身
function fn(){
      console.log( '我是fn函数' );
      fm() ;
} ;
function fm(){
      fn() ;
}
fn() ;

1-3-2 案例1:求奇数

//求奇数(1,3,5,7,9,11,13,15),如第5个奇数是9,求第100个奇数是多少
function foo ( n ) {
    if ( n == 0 ) return 1;
    return foo( n-1 ) + 2;
}
console.log( fn(100) );        //201

1-3-3 案例2:求2的n次方(1,2,4,8,16,32,64)

function fn( n ){
    if( n == 0 ) { return 1 } ;
    return fn(n) * 2 ;
}
console.log( fn(3) );     //8

1-3-4 案例3:求斐波那契数列(1,1,2,3,5,8,13,21)

function fib( n ) {
    if ( n === 0 || n === 1 ) return 1;
    return  fib( n-1 ) + fib( n-2 );
}
console.log( fib(4) );       //5

Paste_Image.png

1-4 对象

1-4-1 创建对象的方法

  • new
var dog = new Object() ;
dog.name = '小狗' ;
dog.age = 2 ;
dog.say = function(){
    console.log( '汪汪' );
}

//调用方法
dog.say() ;  //控制台打印“汪汪”
  • 对象字面量
var dog = {
    name:'小狗' ,
    age:2 ,
    say:function(){
        console.log('汪汪') ;
    }
};
dog.say() ;   //控制台打印“汪汪”
  • 创建多个对象
function obj (name,age,say){
    var ob = new Object();
    ob.name = name ;
    ob.age = age ;
    ob.say = say;
    return ob ;
}
var tom = obj( 'tom' , 18 , function(){} );
  • 构造函数创建对象
function obj (name,age){
    this.name = name ;
    this.age = age ;
    this.say = function(){
        console.log('hello , i am ' + this.name ) ;
    };
}
var tom = obj( 'tom' , 18 , function(){} );
var obj = { name:'tom' , age:18 , addr:'usa' } ;
//k只是一个变量名,可以更改
for( var k in obj ){
    console.log(k);  //打印所有属性 name age addr
    console.log(obj[k]);   //打印所有属性值 tom 18 usa

    //console.log(obj.k);  //点语法不能使用变量,即k不能是变量,如果要用变量必须用[k]
}

1-5 内置对象

1-5-1 复杂类型与简单类型

var obj = { name:'tom' , age:19 } 
function fn(ob){
    ob.name = 'jack'    //更改的是tom的名字
    ob = { name:'jim' , age:20 };  //ob指向其他对象
    ob.age = 22
    console.log( ob )   //{ name:'jim' , age:22 }
}
fn(obj)  //传入了tom的地址
console.log( obj )  //{ name:'jack' , age:19 }

1-5-2 Math对象

var max = Math.max(1,2,3);  //3,最大值
var min = Math.min(1,2,3);  //1,最小值
var fl = Math.floor(2.8);   //2,向下取整
var ce = Math.ceil(2.3);    //3,向上取整
var rd = Math.round(3.5);   //4,四舍五入
var ran = Math.random();    //获取随机数,0到1,包左不包右

1-5-3 Date对象

var da = new Date() ;
var year = da.getFullYear();  //获取年份,如2017
var year2 = da.getYear() ;    //获取年份,如117(2017年),只有三位数
var ri = da.getDate();  //获取今天几号
var day = da.getDay();  //获取星期,星期天为0
var hr = da.getHours() ;  //获取小时,24小时制
var mn = da.getMinutes();   //获取分钟
var sed = da.getSeconds();  //获取秒
var ms = da.getMilliseconds();  //获取毫秒


var msNow = Date.now() ;    //获取现在距离1970年的时间,单位毫秒
var psTime = Date.parse('2016-01-01');  //获取2016距离1970年的时间,单位毫秒

console.log(da.toLocaleDateString());//年月日
console.log(da.toLocaleTimeString());//时分秒
console.log(da.toDateString());//是英文的
console.log(da.toTimeString());//是英文的
//封装获取日期的函数
function getDates(dt) {
    var str="";//存储时间的字符串
    //获取年
    var year=dt.getFullYear();
    //获取月
    var month=dt.getMonth()+1;
    //获取日
    var day=dt.getDate();
    //获取小时
    var hour=dt.getHours();
    //获取分钟
    var min=dt.getMinutes();
    //获取秒
    var sec=dt.getSeconds();
    month=month<10?"0"+month:month;
    day=day<10?"0"+day:day;
    hour=hour<10?"0"+hour:hour;
    min=min<10?"0"+min:min;
    sec=sec<10?"0"+sec:sec;
    str=year+"年"+month+"月"+day+"日 "+hour+":"+min+":"+sec;
    return str;
}

var dt=new Date();
var str=getDates(dt);
console.log(str);  //2016年01月19日 12:20:55
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值