前面的话: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继续执行后续的代码;

   function f1() {
var a = 10;
f2();
}
f1 ();
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设置为当前对象
      ③ 执行函数内部的代码,设置对象的属性和方法
      ④ 返回新创建的对象

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

  1. 浅谈javascript中stopImmediatePropagation函数和stopPropagation函数的区别

    在事件处理程序中,每个事件处理程序中间都会有一个event对象,而这个event对象有两个方法,一个是stopPropagation方法,一个是stopImmediatePropagation方法,两 ...

  2. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  3. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  4. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  5. 浅谈JavaScript中的this

    引言 JavaScript 是一种脚本语言,因此被很多人认为是简单易学的.然而情况恰恰相反,JavaScript 支持函数式编程.闭包.基于原型的继承等高级功能.本文仅采撷其中的一例:JavaScri ...

  6. 浅谈javascript中的作用域

    首先说明一下:Js中的作用域不同于其他语言的作用域,要特别注意     JS中作用域的概念: 表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境.Javascript的作 ...

  7. 浅谈JavaScript中闭包

    引言 闭包可以说是JavaScript中最有特色的一个地方,很好的理解闭包是更深层次的学习JavaScript的基础.这篇文章我们就来简单的谈下JavaScript下的闭包. 闭包是什么? 闭包是什么 ...

  8. 浅谈JavaScript中的继承

    引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...

  9. 浅谈JavaScript中的内存管理

    一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...

随机推荐

  1. EF和linq语句查询条件不等于某个参数出现的问题

    where t.a!=字符串   这是错误的写法,正确为 where t.a!=字符串.trim() 其他类型变量需要保持实体类型和查询条件参数的类型是一致的,不然出现的语句可能会是 类似`Exten ...

  2. 【洛谷4657】[CEOI2017] Chase(一个玄学的树形DP)

    点此看题面 大致题意: 有一棵树,树上编号为\(i\)的节点上有\(F_i\)个铁球,逃亡者有\(V\)个磁铁,当他在某个节点放下磁铁时,与这个节点相邻的所有节点上的铁球都会被吸引到这个节点.然后一个 ...

  3. Too Rich HDU - 5527 (贪心+dfs)

    Too Rich Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  4. Java 获取Web项目相对webapp地址

    例如, import java.io.File; import java.io.FileInputStream; import javax.servlet.http.HttpServletReques ...

  5. 4.在Cisco Packet Tracerl里路由器密码重置

    在路由器的特权模式的密码忘记的情况下,关闭路由器的电源,在接通电源,在路由器载入的时候,按ctrl+c,直接进入monitor模式 输入:confreg 0x2142 reset 重新进入后 enab ...

  6. awk截取指定字段

    #!/bin/bash #好多地方可以优化,先记录下,便于以后使用 dir="/logs/$1"file="/logs/$1/requests.log"if [ ...

  7. ospf多区域实例配置

    需求:是pc1,pc2,pc3直接可以相互通信,ip分别pc1:192.168.1.2 pc2:192.168.3.2 pc3:192.168.5.2 LSW1配置: 首先划分vlan,vlan中配置 ...

  8. 模块之 logging模块 time 模块 random模块 sys模块 pickle模块

    1.如果执行文件不在项目根目录下,需要添加项目根目录到sys.path中2.调用业务逻辑 2.logging模块 程序日志是 什么时间发生了什么事情,以及当时的情况 不是logging的话 记录日志的 ...

  9. python常用内置算法用到的单词音频

    http://boscdn.bpc.baidu.com/v1/developer/990a728b-ca96-4bd9-9124-5357d829bf70.mp3 百度广播开发平台生成

  10. Codeforces Round #462 (Div. 2) C. A Twisty Movement

    C. A Twisty Movement time limit per test1 second memory limit per test256 megabytes Problem Descript ...