JavaScript深度学习(二)—— 变量、函数、es5.0严格模式

变量

  • 定义变量方式
    • let
    • var
    • const
    • function(){} //函数类型
    • import
    • class
  • 命名规范
    • 区分大小写
    • 驼峰命名
    • 关键字保留字
  • 运行和输出
    • 运行方式:浏览器或NODE
    • 输出方式
      • console.log();
      • alert
      • confirm
      • prompt
      • dir
      • table
  • 创建过程
    • 创建变量
    • 创建数据
    • 将两者关联

函数 Function

所有函数都具有Function中的实例成员

语法:arguments:在函数中使用,获取该函数调用时,传递的所有参数

arguments是一个类数组(也称为伪数组:没有通过Array构造函数创建的类似于数组结构的对象),伪数组会缺少大量的数组实例方法

arguments数组中的值,会与对应的形参映射

实例成员

  • length属性,得到函数形参数量
  • apply方法:调用函数,同时指定函数中的this指向,参数以数组传递
  • call方法:调用函数,同时指定函数中的this指向,参数以列表传递
  • bind方法:得到一个新函数,该函数中的this始终指向指定的值。

通常,可以利用apply、call方法,将某个伪数组转换伪真数组。

命名函数表达式(一般不用)

命名函数表达式的形式是这样的,例如:

var test = function abc(){     
document.write('a');
}

他会先定义一个变量,变量里边放入函数,这就是函数表达式。但是命名函数表达式 的变量名会替代函数名的作用,意思就是调用函数你必须 test()才可以,假如你 abc() 就会报错,这个 abc 就不起作用了,但是你输出 test.name 会得到 abc。

匿名函数表达式

既然函数表达式的函数名不起作用了,后来我们就省掉了,例如:

var test = function(){     
document.write('a');
}

立即执行函数(匿名函数之自执行函数):

创建一个函数立刻执行

(function(n){...}(100));

注意点

  1. 只有表达式才能被执行符号‘()’执行:text(),var text()=fn…(函数表达式)
  2. 能被执行符号执行的表达式,就成了立即执行函数,这个函数名字就被忽略。
  3. 一旦形成函数表达式,就无法再通过函数名找到
  4. 在立即执行函数中,如果该函数有名字,则函数体内所有对这个名字的赋值等操作都无效/无视,且不会提升在window中
  5. 有函数名的立即执行函数中是可以访问到这个函数的,就像是arguments.callee

形参和实参

函数()里面的是形参,text(a)里面的a是实参。

var test = function(a){     
document.write('a');
}

JS不定参

JavaScript 天生不定参,不是说在一个函数里有几个形参就必须有几个实参,不是这 样的,在 JS 里,形参比实参多,可以,实参比形参多,也行。

若形参比实参多,未传值的形参为undefined
若实参比形参多,不影响函数,形参会存在arguments数组里。

形参与arguments的映射规则

形参和 arguments 确实是一个变一个跟着变的,确实有这样的绑定规则,但是,他俩不是同一个变量,系统内部有映射规则,就是这俩我变你也得变,但是他们是两个变量。

return

  • return 的第一个作用就是终止函数。
  • return 的第二点作用就是返回值。

递归

其实递归就是一种找规律和找出口的方法,他特别符合人的思维过程。

    + 1.找规律
    + 2.找出口
//n的阶乘
function mul(n){
    //出口
    if(n==1||n==0){
        return 1;
    }

    retutn n*mul(n-1);
}

imply global 暗示全局变量:

即任何变量,如果变量未经声明就赋值,此变量就为全局变量所有。

es5.0严格模式

当启用es5.0严格模式时,es3.0和es5.0产生冲突的部分就使用es5.0方法,否则会使用es3.0方法

启动

在JS代码最上方写:“use strict”;

用法

  • 全局严格模式:在js代码最上方写时,是全局es5.0严格模式
  • 局部函数内严格模式(推荐):也可以写在方法里面,必须是方法里面的第一行,这样是局部es5.0严格模式

特点

  • 不支持with()、arguments.callee、func.caller
  • 变量赋值前必须声明
  • 局部this必须被赋值(Person.call(null/undefined)赋值什么就是什么)
  • 拒绝重复属性和参数
发布了6 篇原创文章 · 获赞 0 · 访问量 83

猜你喜欢

转载自blog.csdn.net/djc_18706636375/article/details/105626049