本文是笔者在看廖雪峰老师JavaScript教程时的个人总结
 
JavaScript中函数定义可以是这样的格式
function 函数名(参数) {
    函数体
}
也可以是这样的格式     
var 函数名 = function (参数) {
    函数体
};
 
关键字一:arguments
              获取全部参数
           只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array。第一个参数是arguments[0]....[n]
关键字二:rest
                    获取 获取除了已定义参数之外的参数
                    定义函数的时候要这样写
                              function foo(a, b, ...rest)
                    如果参数正常,则rest是一个空数组
 
 
 
 
         变量作用域
                     如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量
                     如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用
                     由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行
                     JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量
        变量提升
                JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部
                JavaScript引擎自动提升了变量的声明,但不会提升变量的赋值。
          
          全局作用域
                不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性        
                JavaScript实际上只有一个全局作用域。任何变量(函数也视为变量),如果没有在当前函数作用域中找到,就会继续往上查找,最后如果在全局作用域中也没有找到,则报ReferenceError错误
     
 
          块级作用域     
                为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量(for循环中)
               
          常量
                     ES6标准引入了新的关键字const来定义常量,constlet都具有块级作用域
 
 
 
          对象的方法:
                    1.在一个对象方法内部,this是一个特殊变量,它始终指向当前对象。要保证this指向正确,必须使用obj.方法
                    2.把对象的方法放到外面定义,在内部通过一属性指向函数名。如果在外部直接调用这个函数,则this指向全局对象window。在static模式下,函数的this指向undefined,所以在static模式下,会得到一个错误
                     3.this指针只在对象的函数中指向对象,如果在对象的函数内的函数还是指向undefined。如果要在函数的函数中使用this,可以先声明一个that变量捕获this,在函数的函数中使用this的地方换成that
 
                    4.怎么控制函数中this指针的指向,可以使用函数自带的apply方法。它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。普通函数的话this指针值是null
                    执行格式:函数名.apply(指向的对象(或者null),[函数本身需要的参数列表以数组形式传进来])
                    函数也自带一个call方法,call和apply的区别在于                           
        • apply()把参数打包成Array再传入;
        • call()把参数按顺序传入。
                    5.通过apply实现装饰器。
                         步骤1.需要替换掉的函数也就是需要重构或者说是需要增加功能的函数fun()
                                        var oldfun = fun;
                                        fun = function(){
                                             增加的功能代码
                                              return oldfun.apply(null,arguments);
                                          }
                    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
          

JavaScript函数定义和调用 变量作用域的更多相关文章

  1. JavaScript 函数定义和调用

    普通的函数定义方法: function abs(x):{ if (x >= 0){ return x; }else { return -x ; } } 两种方法是等价的 var abs = fu ...

  2. 深入理解javascript函数定义与函数作用域

    最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...

  3. JavaScript 函数——语法,调用,返回值,局部变量,全局变量,未声明变量

    JavaScript 函数是被设计为执行特定任务的代码块. JavaScript 函数会在某代码调用它时被执行. ㈠函数 ⑴什么是函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. ⑵ ...

  4. JavaScript 函数定义方法

    JavaScript 函数定义方法. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } 函数声明后不会立 ...

  5. Javascript 函数声明、调用、闭包

    1 # Javascript 函数声明.调用.闭包 2 # 一.函数声明 3 # 1.直接声明.浏览器在执行前,会先将变量和函数声明进行提升. 4 fn(); 5 function fn () { 6 ...

  6. ASP.net关于C#代码与javaScript函数的相互调用

    C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...

  7. JavaScript函数的各种调用模式

    函数是JavaScript世界里的第一公民,换句话来说,就是我们如果可以精通JavaScript函数的使用,那么对JavaScript的运用可以更游刃有余了.熟悉JavaScript的人应该都知道,同 ...

  8. Linux Shell函数定义与调用

    一.Shell函数定义格式 shell函数定义格式,各部分说明如下: [ function ]等中括号括起来部分----表示可选(即可有可无) your_function_name部分----为函数名 ...

  9. 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?

    第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一.    案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...

随机推荐

  1. JAVA中的异常及处理异常的方法

    异常 这是我老师的喜好:就是说一上来就拿一张图给大家看看,过过瘾-_- 这是一张: 异常分类图 来,这里还有一张带中文的常见异常截图!!! 1:先来说说什么是异常吧: 其实就是"阻止当前方法 ...

  2. HTML、JavaScript之单双引号转义

    一.HTML : 双引号:" 单引号:' 二.JavaScript: 双引号:\" 单引号:\'

  3. 【转载】Windows下VSCode编译调试c/c++

    懒得自己配置或自己配置出现不明问题的朋友可以点这里: [VSCode]Windows下VSCode便携式c/c++环境 http://blog.csdn.net/c_duoduo/article/de ...

  4. Nginx的安装配置

    1.安装PCRE库 $ cd /usr/local/ $ https://sourceforge.net/projects/pcre/files/pcre/8.36/ $ tar -zxvf pcre ...

  5. OC-@property、self及类的本质

    让代码书写更加简便 --1-- 设置器和访问器 1.1 setter 1.2 getter --2-- 类的本质 2.1 类类型的对象 2.2 类的本质 2.3 如何获取类对象 2.4 类对象的使用 ...

  6. 深入.NET平台C#编程 测试题分析

    选择题讲解 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格式化器的Serialize()和Deserialize()方法可 ...

  7. 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子

    http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...

  8. [Machine-Learning] 熟悉Matlab

    浮点数取整的几个函数 floor: 向下取整 ceil: 向上取整 round: 取最接近的整数 fix: 向0取整 不等于 Matlab 中,使用~=表示不等于. 数组相关操作 使用 [] 命名数组 ...

  9. 【线段树区间合并】HDU1540-Tunnel Warfare

    一.题目 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  10. 前台JS(type=‘file’)读取本地文件的内容,兼容各种浏览器

    [自己测了下,能兼容各种浏览器,但是读取中文会出现乱码.自己的解决方法是用notepad++把txt文件编码改为utf-8(应该是和浏览器编码保持一致吧?..)] 原文  http://blog.cs ...