JS(JavaScript)函数

JavaScript函数

今日大纲:

一.函数

  1.函数的定义

  2.函数中的arguments的参数

  3.函数的全局变量和局部变量

  4.作用域

二.词法分析(尝试理解)

 

三.内置对象和方法

  1.自定义对象

  2.Date对象

  3.Json对象

  4.RegExp对象

  5.Math对象

 

 

一.函数

  1.函数的定义

    1>普通定义

function f1() {
console.log("HelloWorld!");
}

 

    2>带参数的函数定义

function f2(a,b) {
    console.log(arguments);
    consloe.log(arguments.length);
    consloe.log(a,b);
}

 

    3>代返回值的函数

function sum (a,b){
    return a+b;
}

 

    4>匿名函数的定义

var sum = function(a,b){
    return a+b;
}
sum(1,2)

 

    5>立即执行函数

(function(a,b){
    ruturn a+b;
}) (1,2)

 

补充:

ES6中允许使用"箭头" (=>) 定义函数.

var f = v => v;
//等同于
var f = function(v){
    return v;
}

如果箭头函数不需要参数或者需要多个参数,就是用括号代表参数部分:

var f = () => 5;
// 等同于
var f = function () {return 5};

var sum = (num1,num2) => num1+ num2;
//等同于
var sum = function(num1,num2){
    ruturn num1+num2
}

 

  2.函数中的arguments参数

function add (a+b){
    console.log(a+b);
    console.log(arguments.length);
}
add(1,2)

输出结果是:

3
2

 

注意:!!!!!!

    函数只能有一个返回一个值,如果要返回多个值,只能将其放在数组或对象中返回.

 

  3.函数的全局变量和局部变量

    局部变量 : 在JavaScript函数内部声明的变量是局部变量,所以只能在函数内部访问它.只能 函数运行结束完毕,本地变量就会被删除.

    全局变量 : 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它.

    变量生存周期 : JavaScript变量的生命期从它们被声明的时间开始

           局部变量会在函数结束以后被删除

           全局变量会在页面关闭之后被删除

 

  4.作用域

    作用域法则: 首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层.

例题1

var city = "BeiJing";
function f() {
  var city = "ShangHai";
  function inner(){
    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

f();  //输出结果是?

ShengZhen

例题2

var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret();  // 打印结果是?

BeiJing

例题3----闭包

var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();
输出结果是:

ShangHai

 

二.词法分析(尝试理解)

JavaScript中,在调用函数的一瞬间,会先进行词法分析.

词法分析的过程:

  当函数调用的前一瞬间,会先形成一个激活对象,Active Object (AO) 并分析以下3个方面

1.函数参数,如果有,则将此参数赋值给AO ,且值为undefind 如果没有,则不做任何操作.

2.函数局部变量,如果AO上有同名的值,则不做任何操作.如果没有,则将此变量赋值给AO,并且值为undefined

3.函数声明,如果AO上有,则会将AO上的对象覆盖,如果没有,则不做任何操作

例题1:

var age = 18;
function foo(){
  console.log(age);
  var age = 22;
  console.log(age);
}
foo();  // 问:执行foo()之后的结果是?

undefined
22

例题2:

var age = 18;
function foo(){
  console.log(age);
  var age = 22;
  console.log(age);
  function age(){
    console.log("呵呵");
  }
  console.log(age);
}
foo();  // 执行后的结果是?

 

三.内置对象和方法

  1.自定义对象

  JavaScript的对象,本质上是键值对的集合,但是只能用字符串作为键.

var a = {"name":"ALEX","age":18};
console.log(a.name);
console.log(a["age"]);

  遍历对象中的内容:

var a = {"name":"ALEX","age":18};
for (var i in a){
    console.log(i,a[i]);
}

创建对象:

var person = new Object();  // 创建一个person对象
person.name = "ALEX";       // person对象的name属性
person.age = 18                 // person 对象的属性

 

  2.Date对象

创建Date对象

// 方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());

// 方法2 : 参数为日期字符串

var d2 = new Date("2018/9/5 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());

// 方法3 参数为毫秒
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4 : 参数为年月日小时分钟秒毫秒

var d4 = new Date (2004,2 20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒并不直接显示

 

Date对象的方法:

var d = new Date();
//getDate()             获取日
//getDay()              获取星期
//getMonth()            获取月(0-11)
//getFullYear()         获取完整年份
//getYear()             获取年
//getHours()            获取小时
//getMinuters()         获取分钟
//getSeconds()          获取秒
//getMilliseconds       获取毫秒
//getTime               返回累计毫秒数(从1970/1/1午夜)

  3.Json对象

var str1 = "{"name":"ALex","age": 18}";
var obj1 = {"name":"Alex","age":18};

//序列化-----对象转换成字符串
var str = JSON.stringify(obj1);

// 反序列化 -------对象转换成对象
var obj = JSON.parse(str1);

 

  4.RegExp对象

// RegExp 对象

// 创建RegExp对象方式(都逗号后面不要加空格)

var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");

// 匹配响应的字符串

var s1 = "bc123"

//RegExp对象的test方法,测试一个字符串是否符合对应的规则,返回值是true或false

reg1.test(s1);  //true

 

posted @ 2018-09-05 17:47  Anna_kc  阅读(190)  评论(0编辑  收藏  举报