浅谈JavaScript中的函数问题

前面的话:JavaScript可运行在所有主要平台的主流浏览器上,也可运行在每一个主流操作系统的服务器端上。所以呢,要想成为一名优秀的全栈工程师,必须懂得JavaScript语言。这是我整理的JS的部分函数问题,供大家参考借阅,有不妥的地方也请多多指教。

1、函数的三要素

   1.1 函数的功能
   1.2 函数的参数

a. 形参——定义函数的时候,没有实际的值,给实参占位

b. 实参——调用函数的时候,有实际的值;

c. 当调用函数的时候会把实参复制一份传递给函数

d. 函数调用的时候,实参和形参的个数可以不等

e. 在其他语言中,有重载的概念,即函数的名字相同,但参数个属不同;但javascript中没有重载的概念。下面的相同名称的函数会把上面的函数覆盖

   1.3 函数的返回值——返回计算的结果

  1)函数返回,后续的代码不会执行

  2)如果return后面跟内容了,就返回return后面的内容

  3)如果return后面没有跟内容,返回undefined,return后面的代码不会执行

  4)如果函数内部没有写返回值,返回undefined

  5)推荐的作法是要么让函数始终都返回一个值,要么永远都不要返回值

2、函数参数的注意点

function funName(a, b) { }

2.1 判断输入的参数是否为空(过滤掉undefined null NaN " "    0)

a = a || 0;

b = b || 0;

2.1 判断输入的参数是否为数字

3、函数的基本形式(4种)

——无参数无返回值

——有参数无返回值

——无参数有返回值

——有参数有返回值

4、/ * * +回车    对函数进行注释,如下图:

5、函数调用

  5.1 一个函数内部调用另一个函数的执行过程:

当f2执行完毕之后,会返回到f1继续执行后续的代码;

1   function f1() {
2                         var a = 10;
3                            f2();
4                  }
5                        f1 ();
6                        f1 ();

   5.2 函数对自身的调用称为递归【自调用函数】

    ——递归会消耗资源,当自身调用太多次仍会出现报错。

5.3 函数是一种数据类型 function

①函数可以作为另一种函数的参数(如5.1)

②函数可以作为函数的返回值

6、函数定义的两种方式

  6.1 函数声明 function fn() { }
    6.2 函数表达式 var myFun = function () {}   //这里调用的是匿名函数
    6.3 函数声明和函数表达式的区别:

i)函数声明——函数提升

ii)函数表达式——变量提升(下面会详细介绍)

7、变量的作用域

    7.1 全局作用域:在任何位置都可以访问【全局变量】

i)在script标签中定义的变量

ii)不使用var声明的变量

iii)在关闭网页或浏览器,全局变量才会释放

7.2 局部作用域:在函数内部声明一个变量,只能在该函数内部使用【局部变量】

i)只有在函数内部使用var定义的变量

ii)超出函数的作用范围后,局部变量被销毁

    7.3 javascript中没有块级作用域

i)块级作用域:在其他语言中,在代码块中定义的变量,外部是访问不到的;

ii)if 和 for 中使用var定义的变量都是全局变量

8、函数提升和变量提升(过程)

  8.1  函数内部,获取变量的时候,会先在当前作用域下找,有没有变量声明,如果有就返回当前作用域中变量的值
  8.2  如果当前作用域中没有对应变量的声明,会返回上一级去找

1)解析器预解析的过程:

i,解析器

①全局作用域 预解析

 a) var num ;
 b) function fun ()

②一行一行执行代码

  a) num = 10;
  b) fun (); 调用fun函数
    i) fun的局部作用域
      One. 预解析
        First.  var num;
      Two. 一行一行执行代码
        First.   console.log(num);  输出undefined
        Second.  num = 20;
  var  num;
  function fun () {
     var num;
     console.log (num );
     num = 20;
  }
  num = 10;
  fun();
var num = 10;
 fun();
function fun () {
        var num;
        console.log (num );
        num = 20;
  }

// 函数内部访问外部变量
    var a = 10;
    function fn () {
        console.log(a);
    }

  2)变量提升——定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升

  3)函数提升——JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

9、构造函数与自定义构造函数

  9.1 构造函数:构造一个对象,并且返回的函数

    ——调用构造函数: var student = new Object ();

    ① 构造函数的目的是用来创建对象

    ② 使用new Object()创建对象

    ③ 封装函数创建多个对象

    ④ 自定义构造函数

  9.2 自定义构造函数

  ① 内存开辟空间,存储新创建的对象 new Object ();
      ② 会把this设置为当前对象
      ③ 执行函数内部的代码,设置对象的属性和方法
      ④ 返回新创建的对象

时间: 2024-08-05 07:07:00

浅谈JavaScript中的函数问题的相关文章

浅谈JavaScript中的原型模式

在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">//工厂模式 function createPerson(name,age,job) { var o = new Object; o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } retur

A1—浅谈JavaScript中的原型

原型是什么?想要了解这个问题,我们就必须要知道对象. 对象 根据w3cschool上的介绍:对象只是带有属性和方法的特殊数据类型. 我们知道,数组是用来描述数据的.其实呢,对象也是用来描述数据的.只不过有一点点的区别,那就是数组的下标只能是数字.所以,数组最好只用来装同样意义的内容.比如说[1,2,3,4,5]或者["a","b","c","d","e"]等.因为他们的表达的含义是一样的.那么如何表达含义不

A1—浅谈JavaScript中的原型(二)

原型是什么?想要了解这个问题,我们就必须要知道对象. 对象 根据w3cschool上的介绍:对象只是带有属性和方法的特殊数据类型. 我们知道,数组是用来描述数据的.其实呢,对象也是用来描述数据的.只不过有一点点的区别,那就是数组的下标只能是数字.所以,数组最好只用来装同样意义的内容.比如说[1,2,3,4,5]或者["a","b","c","d","e"]等.因为他们的表达的含义是一样的.那么如何表达含义不

浅谈JavaScript中继承的实现

  谈到js中的面向对象编程,都有一个共同点,选择原型属性还是构造函数,两者各有利弊,而就片面的从js的对象创建以及继承的实现两个方面来说,官方所推荐的是两个相结合,各尽其责,各取其长,在前面的例子中,我已就在JavaScript中对象创建的方法做了一些总结,下面就其继承来道说一二:   1:原型链继承: 每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象内部的指针(默认的原型,所有默认类型都继承了Object,而这个继承也是用过原型链实现) fu

浅谈Kotlin中的函数

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UV23Uw_969oVhiOdo4ZKAw作者:连凌能 Kotlin,已经被Android官方宣布 kotlin first 的存在,去翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin.Kotlin的务实作风,提供了很多特性帮助开发者减少冗余代码的编写,可以提高效率,也能减少异常. 本文简单谈下Kotlin中的函数,包括表达式函数体,命名参数,默认参数,顶层函数

浅谈javascript中的闭包

引入定义:闭包只有权访问另一个函数中的作用域中的函数. 简单点说,就是当某函数a执行完毕后,闭包不会使得GC(JavaScript的回收机制)去回收a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量. 代码示例: window.onload = function(){ function createComparisonFunction(propertyName){ return function(object1, object2){ var value1 = object1[proper

浅谈javascript中的For in语法

相信大家都使用过javascript中的for循环,主要用来遍历数组对象,方便执行重复操作,体现代码的重用性.但是,应为数组的索引一般是整 型的数字,当遇到JSON对象或者object对象时,就不能使用for循环遍历了,应当使用for in函数遍历对象,这里就谈谈个人对for in的理解. 首先,虽然叫For in语法但关键字还是用for,这个语法还可以用来遍历对象,拿到的是对象的属性名称,然后通过对象名[属性名称]就可以拿到对象.个人觉得,理解这个语法的本质,关键在于理解每次循环得到的到底是什

浅谈javascript中的call、apply、bind

apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 先来一个栗子: function fruits() {} fruits.prototype = { color: "red", say: function() { console

浅谈Javascript中面向对象之对象

一.对象 1.1创建对象 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.一个简单的对象创建: var People = { name : "eavan", age : 24, getName : function(){ alert(this.name); //eavan } } 使用的时候就可以用People.name,获取People这个对象的name属性,或者是People.getName()来得到People的name值.另一