资讯专栏INFORMATION COLUMN

JavaScript学习第八天笔记(Function)

104828720 / 2772人阅读

摘要:在中,函数也是以对象的形式存在的,每个函数都是一个对象。但是,外部函数却不能够访问定义在内部函数中的变量和函数。特点局部变量在函数中定义有共享意义如缓存计数器等的局部变量。

Function

函数是这样一段JavaScript代码 它只定义一次 但可能被执行或调用多次,Function类型是JavaScript提供的引用类型之一 通过Function类型创建Function对象。在JavaScript中,函数也是以对象的形式存在的,每个函数都是一个Function对象。

定义函数的三种方法
/*1.函数的声明方式*/
function fun() {
    console .log("this is a function");
}
fun();
/*2.字面量方式*/
var fn = function () {
    console.log("this is a function");
}
fn();
/*3.创建Function类型的对象(就是一个函数)*/
var fun3 = new Function ("a","console.log(a)");
fun3(100);
/*语法:
var 函数名 = new Function("参数","函数体");
*/
Object与Function
/*1.Object与Function都是自身类型*/
console .log(Object instanceof Object);//true
console .log(Function instanceof Function);//true
/*2.Object自身是构造函数,所有的函数都是Function类型*/
console .log(Object instanceof Function);true
/*3.Function是引用类型,用于创建对象,是对象都是Object类型*/
console .log(Function instanceof Object);
Function属性 apply方法

Function的apply()方法用于调用一个函数 并且接受指定的this值 以及一个数组作为参数

/*定义一个函数*/
function fun (value){
    console .log("this is "+value);
}
/*第一种调用形式,语法结构:函数名称()*/
fun("10");
/*2.第二种调用方式*/
/*apply (thisArg,argArry)方法
* 参数
       thisArg-this
       argArry-数组,作为参数(实参的列表)
       */
fun.apply(null,["tn"]);
call方法

Function的call()方法用于调用一个函数 并且接受指定的this值作为参数 以及参数列表

/*定义一个函数*/
function fun(value){
    console .log("this is "+value);
}
/*1.函数调用*/
fun (100);
/*2.apply方式调用*/
fun.apply(null,[100]);
/*3.call方法调用*/
fun.call(null,100);
/*语法结构:函数名.call(thisArg,arg1,arg2,...)*/
bind方法

语法:
bind(thisArg,arg1,arg2,arg3....)
*作用:用于创建一个新函数(成为绑定函数)

参数

 *thisArg-this
  * arg1,arg2...-表示参数列表
  * 返回值-表示返回新的函数

function fun (value){
    console .log("this is "+ value);
    
}
fun("20");
var f = fun.bind(null,50);
f();
arguments对象

由于JS的函数中,不存在重载,所以使用arguments对象实现模拟重载

function add(){
    var num= arguments.length;
    switch(num){
        case 2:
            return arguments[0] + arguments[1];
            break;
        case 3:
            return arguments[0] + arguments[1] + arguments[2];
            break;
        case 4:
            return arguments[0] + arguments[1] + arguments[2] + arguments[3];
            break;

    }
}
console .log(add(0,1));
console .log(add(0,1,2));
console .log(add(0, 1,2,3));
函数的递归

调用自身的函数被称之为递归函数 在某种意义上说 递归近似于循环 两者都有重复执行相同的代码 并且两者都需要一个终止条件以避免无限循环或者无限递归

function fn(v){
    console.log(v);
    if (v >= 10) {
        return;
    }
    // fn(v + 1);
    arguments.callee(v + 1);
}
// fn(0);

var f = fn;
fn = null;
f(0);
// console.log(f);
特殊函数 匿名函数

匿名函数的作用:
1.将匿名函数作为参数传递给其他函数 -> 回调函数
2.将匿名函数用于执行一次性任务 -> 自调函数

回调函数

当一个函数作为参数传递给另一个函数时,作为参数的函数被称之为回调函数

var one = function(){
    return 1;
}

function fn(v){
    return v();
}

或者是

var result = fn(function(){return 1;});

console.log(result);
自调函数

所谓自调函数就是在定义函数后自行调用

/*
    自调函数 - 定义即调用的函数
    * 第一个小括号 - 用于定义函数
    * 第二个小括号 - 用于调用函数
 */
// 全局作用域 - 生命周期:JavaScript文件从执行到执行完毕
(function(value){
    // 函数作用域 - 生命周期:从函数调用到调用完毕
    console.log("this is " + value);
})("function");
// 表达式语法
(function(value){
    // 函数作用域 - 生命周期:从函数调用到调用完毕
    console.log("this is " + value);
}("function"));

!function(value){
    // 函数作用域 - 生命周期:从函数调用到调用完毕
    console.log("this is " + value);
}("function");

+function(value){
    // 函数作用域 - 生命周期:从函数调用到调用完毕
    console.log("this is " + value);
}("function");
作为值的函数

将一个函数作为另一个函数的结果进行返回,作为结果返回的函数称之为作为值得函数

var one = function(){
    return 100;
}

function fun(){
    var v = 100;
   return function(){
        return v;
    };
}
闭包 概述

JavaScript允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。但是,外部函数却不能够访问定义在内部函数中的变量和函数。当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。闭包就是该函数能使用函数外定义的变量。

特点

1.局部变量:在函数中定义有共享意义(如:缓存、计数器等)的局部变量。(注意:定义成全局变量会对外造成污染)
2.内部函数:在函数(f)中声明有内嵌函数,内嵌函数(g)对函数(f)中的局部变量进行访问
3.外部使用:函数(f)向外返回此内嵌函数(g),外部可以通过此内嵌函数持有并访问声明在函数(f)中的局部变量,而此变量在外部是通过其他途径无法访问的

作用

1.提供可共享的局部变量
2.保护共享的局部变量 提供专门的读写变量的函数
3.避免全局污染

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

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

相关文章

  • 百度前端学院-基础学院-第七天到八天

    摘要:第五天到第六天的内容没有记笔记,不好不好。第七天到第八天的学习目标是学习布局的各种方式。主要包含相关和相关。定位的元素应该在文档流中的间隙不再存在绝对定位的元素不再存在于正常文档布局流程中。内容较多,请参考学习了容器项第五天到第六天的内容没有记笔记,不好不好。 第七天到第八天的学习目标是:学习布局的各种方式。主要包含position相关和Flexbox相关。 知识点: 1、默认情况下,块级元...

    zombieda 评论0 收藏0
  • 26天学通前端开发(配资料)

    摘要:网上有很多前端的学习路径文章,大多是知识点罗列为主或是资料的汇总,数据量让新人望而却步。天了解一个前端框架。也可以关注微信公众号晓舟报告,发送获取资料,就能收到下载密码,网盘地址在最下方,获取教程和案例的资料。 前言 好的学习方法可以事半功倍,好的学习路径可以指明前进方向。这篇文章不仅要写学习路径,还要写学习方法,还要发资料,干货满满,准备接招。 网上有很多前端的学习路径文章,大多是知...

    blair 评论0 收藏0
  • 八天-《企业应用架构模式》-通盘考虑

    摘要:思考三个方面的技术实践持续集成驱动测试开发和重构从领域层开始事务脚本模式最简单,适合于在关系数据库之上构建领域模型需要非常专业的技术,还有鱼数据库的连接表模块模式折中,在这类有非常强大记录集支持的环境非常合适理论上,可以根据架构来选取工具实 思考三个方面的技术实践:持续集成、驱动测试开发和重构 1. 从领域层开始 1)事务脚本模式最简单,适合于在关系数据库之上构建;领域模型需要非常专业...

    Tony_Zby 评论0 收藏0
  • 百度前端学院-基础学院-第七天到八天之BFC

    摘要:简介全称中文为块级格式化上下文。特征总之记住一句话元素特征表现原则就是内部元素无论怎么翻江倒海,都不会影响外部元素。如何触发,常见如下的值不为的值为,或。的值不为和需掌握自适应模块布局内容很多,具体参考1、BFC简介 BFC全称block formatting context,中文为块级格式化上下文。特征总之记住一句话: BFC元素特征表现原则就是:内部元素无论怎么翻江倒海,都不会影响外部元...

    junfeng777 评论0 收藏0
  • 如何"有计划,高效率,优简历"应对面试

    摘要:虽然有了十全的计划,但如何高效率去记住上面那么多东西是一个大问题,看看我是怎么做的。 前言 前一篇文章讲述了我在三月份毫无准备就去面试的后果,一开始心态真的爆炸,但是又不服气,一想到每次回来后家人朋友问我面试结果的期待脸,越觉得必须付出的行动来证明自己了。 面经传送门:一个1年工作经验的PHP程序员是如何被面试官虐的? 下面是我花费两个星期做的准备,主要分三部分: 有计划——计划好...

    gyl_coder 评论0 收藏0

发表评论

0条评论

104828720

|高级讲师

TA的文章

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