资讯专栏INFORMATION COLUMN

JS函数的一些基础知识

Ashin / 2766人阅读

摘要:为了更好的讲解构造函数原型原型链等,我们需要复习一下函数的一些基础知识。闭包在复习了函数的相关基础知识之后,我们终于可以进入闭包。我们可以这样理解闭包,首先,闭包是一个函数,是一个什么样子的函数呢是一个可以访问另一个函数中变量的函数。

为了更好的讲解构造函数、原型、原型链等,我们需要复习一下函数的一些基础知识。接下来,就让我们一起回味一些JS的基础知识点。

全局变量VS局部变量

简单粗暴的来说,全局/局部变量就是:
1)全局变量:函数外部声明,或者不使用var关键字,在运行的任何地方都可以引用。
2)局部变量:函数内部声明,且实用var关键字,只能在函数内部引用。
如:

1)var a = 10;//全局变量
2)function test(){
    a = 10;//全局变量
}
3)function test(){
    var a = 10;//局部变量
}

当然,我们也可以实用bind()、call()、apply()等方法改变运行环境。
详情可以查阅:
1)bind()
2)call()
3)apply()

arguments

函数的arguments是一个对象,非数组,而是一个类数组的对象,包含lenth属性,适用于动态参数的场景,不建议滥用,因为它会影响你代码的可读性。

function add(a,b){
    return arguments[0]+arguments[1];//相当于return a+b;
}
add(1,2);//3
this指针

如果this在全局作用于下,那么this指向window。如果this在对象的方法中,则指向该对象。

window.name = "wuhuiming";
var i = {
    name:"huimingwu"
};
function sayName(){
    console.log(this.name);
}
sayName();//wuhuiming
i.sayName = sayName;
i.sayName();//huimingwu
函数的属性

函数有三个属性:name、length和prototype。其中,length又与arguments.length有一点点的区别,即:length与arguments.length:前一个为函数的length,在声明时确定,后一个为arguments的length,根据调用时传递的值确定。

闭包

在复习了函数的相关基础知识之后,我们终于可以进入闭包。作为一个前端开发者,看见闭包,是否就立刻兴奋了呢?闭包又是什么呢?接下来,让我们走进闭包的世界。

什么是闭包?

在 JavaScript高级程序设计 一书中,闭包是这样被描述的——“闭包是指有权访问另一个函数作用域中的变量的函数”。我们可以这样理解闭包,首先,闭包是一个函数,是一个什么样子的函数呢?是一个可以访问另一个函数中变量的函数。

闭包的简单案例
function test(){
    var i = "Hello World";
    function test2() {
        return i;
    }
    return test2;
}

var test = test();
test();//Hello World

以上就是一个闭包的简单案例,test2是一个函数,是一个什么样的函数呢?它是一个可以访问父函数test作用域中变量i的函数,就这样,一个简单的闭包就产生了。

当然,闭包的应用还有很多很多很多,如Jquery的封装方式就是采用了闭包,有兴趣的小伙伴可以去围观围观Jquery的源码。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93189.html

相关文章

  • JS基础知识:变量对象、作用域链和闭包

    摘要:前言这段时间一直在消化作用域链和闭包的相关知识。而作用域链则是这套规则这套规则的具体运行。是变量对象的缩写那这样放有什么好处呢我们知道作用域链保证了当前执行环境对符合访问权限的变量和函数的有序访问。 前言:这段时间一直在消化作用域链和闭包的相关知识。之前看《JS高程》和一些技术博客,对于这些概念的论述多多少少不太清楚或者不太完整,包括一些大神的技术文章。这也给我的学习上造成了一些困惑,...

    Keven 评论0 收藏0
  • MongoDB指南---4、MongoDB基础知识-使用MongoDB Shell

    摘要:也可以在中使用函数来执行命令行程序。注意,这种方式并不能保护数据库免受恶意用户的攻击,只能预防自己的手误。必须使用语法才能将解释为相应的变量。上一篇文章指南基础知识数据类型下一篇文章指南创建删除文档 上一篇文章:MongoDB指南---3、MongoDB基础知识-数据类型下一篇文章:MongoDB指南---5、创建、删除文档 本节将介绍如何将shell作为命令行工具的一部分来使用,如...

    mykurisu 评论0 收藏0
  • MongoDB指南---4、MongoDB基础知识-使用MongoDB Shell

    摘要:也可以在中使用函数来执行命令行程序。注意,这种方式并不能保护数据库免受恶意用户的攻击,只能预防自己的手误。必须使用语法才能将解释为相应的变量。上一篇文章指南基础知识数据类型下一篇文章指南创建删除文档 上一篇文章:MongoDB指南---3、MongoDB基础知识-数据类型下一篇文章:MongoDB指南---5、创建、删除文档 本节将介绍如何将shell作为命令行工具的一部分来使用,如...

    wujl596 评论0 收藏0
  • 翻译连载 |《你不知道JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 引言&前言

    摘要:我称之为轻量级函数式编程。序众所周知,我是一个函数式编程迷。函数式编程有很多种定义。本书是你开启函数式编程旅途的绝佳起点。事实上,已经有很多从头到尾正确的方式介绍函数式编程的书了。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson - 《You-Dont-Know-JS》作者 译者团队(排名不分先后):阿希、blueken、brucecham、...

    2bdenny 评论0 收藏0
  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0

发表评论

0条评论

Ashin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<