• JavaScript (二)


     定义函数:

    function f1() {
        console.log('第一个JS函数')
    }
    
    f1();
    
    
    // 带参数的函数
    
    function f2(a) {
        console.log(a)
    }
    
    f2('hello world!');
    f2('带参数的函数');
    
    
    // 匿名函数
    
    sum = function (a, b) {
        return a + b;
    }
    ret = sum(1, 2);
    console.log('匿名函数的值为' + ret);
    
    
    
    
    eat = function (apple) {
        // console.log(apple);
        return apple;
    }
    
    r = eat('wahha');
    console.log(r);
    
    
    
    
    // 立即执行函数
    (function (x) {
        console.log('立即执行');
        return x;
    })(1);
    

    箭头定义函数

    使用箭头函数注意几点:
    1、函数体内的this对象就是定义时所在的对象,而不是使用时所在对象;
    2、不可以当作构造函数使用,也就是不能用new命令实例化一个对象,否则会抛出一个错误;
    3、不可以使用arguments对象,该对象在函数体内不存在,如果要用的话,可以用rest参数代替;
    4、不可以使用yield命令,箭头函数不能用作Generator函数;
    function f(v) {
        return v
    }
    r1 = f('这是标准版');
    console.log(r1);
    
    
    f = v => v;
    r2 = f('这是简约版');
    console.log(r2);
    
    /*需要参数
    函数名 = 参数 = >函数体;
    函数名(实参)*/
    
    function f(v) {
        return v
    }
    r1 = f('这是标准版');
    console.log(r1);
    
    
    f = v => v;
    r2 = f('这是简约版');
    console.log(r2);
    
    
    
    /*不需要参数  */
    // 函数名 = () => 函数体
    function f1() {
        return console.log('标准版不需要参数');
    }
    f1();
    
    
    f2 = () => console.log('简约版不需要参数');
    f2();
    

    函数中的参数 只能返回一个值,要返回多个值,必须放在数组或对象中返回

    add = (a,b) =>
        console.log(a+b);
        // console.log(arguments.length)  箭头定义函数 不能用arguments.length
    add(1,2);

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

    局部变量,作用域

    city = "BeiJing";
    function f() {
      city = "ShangHai";
      function inner(){
        city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    
    f();  //输出结果是? 深圳 自己的作用域中有,就直接调用
    
    
    city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
    city = "ShangHai";
      return Bar;
    }
    ret = f();
    ret();  // 打印结果是? 上海 自己作用域中没有 找上级, 上级找不到找外层
    
    
    var city = "BeiJing";
    function f(){
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();  // 打印结果是? 北京 自己作用域中没有 找上级, 上级找不到找外层
    

    自定义对象 对象其实就是 {键值对的集合 hash结构 }

    var a = {'name':'alex','age':18};
    console.log(a.name);
    console.log(a.age);
    
    
    for (var i in a){
        console.log(i,a[i])
    }
    
    新建一个对象
    var person = new Object();
    person.name = 'alex';
    person.age = 19;
    
    console.log(person);
    
    for (var i in person){
        console.log(i,person[i]);
    }
    
    var m = new Map();
    var o = {p:'wakaka'};
    
    m.set(o,'新加的o');
    

    词法分析

    词法分析的具体步骤:在函数运行的瞬间,会生成一个活动对象(AO, Active Object)。

    1. 分析函数参数
    • 将函数的形参添加为AO属性,属性的默认值为undefined
    • 接收函数的实参,并覆盖原属性值。
    1. 分析变量声明/分析局部变量
    • 若AO中不存在与声明的变量所对应的属性,则添加AO属性为undefined
    • 若AO中已存在与声明的变量所对应的属性,则不做任何修改。
    1. 分析函数声明
    • 若AO中存在与函数名所对应的属性,则覆盖原属性为一个函数表达式。
    function t(age){
    	var e = 2;
    	var age = 10;
    	function age() {
    	}
    }
    t(2);
    
    
    具体步骤:
    
    1、 函数在运行前的瞬间,会生成一个活动对象(Active Object),简称AO。
    
    2、分析函数的参数,并将其作为AO的属性,默认值全部为underfined,如:
    
    AO{age=underfined}。
    
    3、分析函数接受到的参数,并将参数内容设置到对象的AO属性上,如:
    
    AO{age=2}
    
    4、分析函数内部的变量声明,如var age,如果AO上还没有age属性,则添加AO属性,值是undefined;如果AO上已经有age属性则不做任何影响。如:
    
    AO{age=2, e=undefined}
    
    5、分析函数声明,并将函数赋给成AO的属性。
    
    AO{age= function(){}, e=undefined}
    
    注意:由于age属性已经存在,则被覆盖掉了。
    
  • 相关阅读:
    linux c 链接详解3-静态库
    ubuntu下安装chrome谷歌浏览器
    零填充(Zero-padding)
    单例模式的多种写法(线程安全)
    执行代码出现ImportError:attempted relative import with no known parent package
    用anaconda安装tensorflow
    A* 算法的原理
    梯度消失(vanishing gradient)和梯度爆炸(exploding gradient)
    spark安装
    [转]虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
  • 原文地址:https://www.cnblogs.com/niuli1987/p/9590904.html
Copyright © 2020-2023  润新知