美文网首页
前端学习日记-js函数的定义和调用(个人学习笔记,如果错了请指正

前端学习日记-js函数的定义和调用(个人学习笔记,如果错了请指正

作者: yhqiao | 来源:发表于2018-09-10 14:12 被阅读0次

    1.参数

    js中分为形参和实参,形参是函数中的变量,实参是一个实际的数,是运行时函数调用的参数。

    一、函数定义(function a(){ }

    1.函数名称标识符(a)

    形象的说就是函数的名字,便于我们后续调用,名字是可以随便取得(合法),但是最好定义和函数意义相同的名称,便于后期维护了解。

    2.一对圆括号()

    里面由0个或多个逗号隔开的标识符组成的列表,用来表示函数的参数名称,他们就像函数体中的局部变量一样(书中原话)。

    3.一对花括号({ })

    连包含js语句,这些语句构成函数体,调用函数就会执行这些语句。

    4.函数可以赋给一个变量 var f = function fact(){ };

    可以作为参数传给其他函数 data.sort( function(a,b) { return a-b } );

    有时候会定义后立刻调用 var ten = ( function(x) { return x*x } (10) )

    这些属于函数定义表达式,通常而言,以表达式方式定义函数一般不需要名称,这会让定义他们的代码更为紧凑,这种特别适合那些之调用一次的函数。

    5.命名

    5.1 取描述性强又简洁的函数名

    5.2 通常以动词或以动词为前缀的词组

    5.3 第一个字符小写

    5.4 单词与单词之间用下划线分割

    5.5 除了第一个单词的首字母小写,其他的首字母都大写

    6.嵌套函数

    js中函数可以嵌套在其他函数中,嵌套函数可以访问嵌套他们(或多重嵌套)的函数的参数和变量。

    ps:function a(b,c){ function d( e,f){ } },函数d可以读写a中的b,c;这是这是函数作用域规则

    以语句声明定义的函数有个限制:就是不能出现在循环语句,条件判断,或者try/cache/finally以及with语句中,(ps:有些js实现并没有严格遵守这个规则)

    二、函数调用

    1.函数调用的四种方法

    作为函数

    作为方法

    作为构造函数

    通过call()和apply()方法间接调用

    2.参数和返回值得处理

    2.1 参数

    在一个调用中,每一个参数表达式都会计算一个值,计算的结果作为参数传递给另外一个函数,这些值作为实参传递给声明函数时定义的形参。在函数体中存在一个形参的引用,指向当前传入的实参列表,通过他可以指向当前传入的的实参列表。

    2.2 返回值的处理

    对于普通的函数调用,函数的返回值成为调用表达式的值;如果函数返回是因为到达结尾,则返回值就是undefined;如果函数返回是因为遇到了return,则函数返回值就是return之后表达式的值,如果return语句没有值则返回undefined;

    (ps:this可以用来当前脚本运行时,是否为严格模式)(ps:脚本类似于一个封装的函数,类似于生活中的剧本,是使用脚本语言编写的,自己的理解

    调用表达式

    3.方法调用

    例如:有一个函数f和一个对象o;则可以给函数定义一个名为m()方法,o.m = f ; 调用时 :o.m() ; 如果m()需要两个参数则 o.m(x,y); (ps:函数表达式本事就是一个属性访问表达式)

    方法和this关键字是面向对象编程范例的核心!!!

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(大部分情况是正确的,但是有时不能这样理解)

    情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window

    情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

    情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象

    this的值是随着调用变化的,我百度了一个介绍this的网页 https://www.cnblogs.com/pssp/p/5216085.html 想多了解的可以去看看。)

    3.1 函数调用一般用点符号来访问属性,使用方括号也能进行(属性访问表达式),

    例子:o[ "m" ](x,y); //o.m(x,y)另一种写法;a[0](z) //同样是一个方法的调用(这里假设a[0]是一个函数);

    复杂的例子:customer.surname.toUpperCase(); //调用customer.surname的方法 ;f().m(); //在f()调用结束后继续调用返回值中的方法m();

    3.2 方法链

    当方法的返回值是一个对象,这个对象还可以再调用他的方法。这种方法调用序列中(通常称为“链”或“级联”)每次调用结果都是另外一个表达式的组成部分。

    $(":header").map(function() { return this.id }).get().sort(); //找到所有的header,取得他们id的映射,转换为数组并对他们进行排序;

    链式调用:这种编程风格只要指定一次要掉用的对象即可,余下的方法都可以基于此进行调用;(当方法不需要返回值时,最好直接返回this)

    注意:不能给this赋值

    4.构造函数调用

    4.1 函数或方法调用前带有关键字new,就构成 构造函数 调用。

    如果构造函数没有形参可以省略实参列表和圆括号:var o = new Object(); 等价与 var o = new Object;

    4.2 构造函数通常不使用return,

    5.间接调用

    一般是使用call()和apply()具体后面再说。

    相关文章

      网友评论

          本文标题:前端学习日记-js函数的定义和调用(个人学习笔记,如果错了请指正

          本文链接:https://www.haomeiwen.com/subject/iepjgftx.html