【第六部分 | JavaScript高级】2:函数高级

news2024/11/18 19:50:47

目录

【第二章】函数进阶

| (复习)函数声明

| 函数也是对象

| 函数的this指向

| 改变函数this的指向

| 函数的“严格模式”

| 闭包

| 浅拷贝和深拷贝


【第二章】函数进阶

| (复习)函数声明


| 函数也是对象

Java中的方法好像不是对象!只是对象的一个方法

函数是对象,函数也有Function的原型对象。所有的函数的f对象实例也可以访问其prototype原型对象。

| 函数的this指向

 

| 改变函数this的指向

方法1:call()

 

方法2:apply()

 

方法3:bind()

 

三者总结

| 函数的“严格模式”

更多严格模式要求参考:严格模式 - JavaScript | MDN

 

| 闭包

什么是闭包

  • 闭包就是一个函数:变量所在的函数就是闭包(函数)

  • 也可以说:任何一个函数的作用域,如果可以访问其它函数内部的局部变量,则产生了闭包现象

 闭包的作用:在f 作用域的外部,访问f作用域内的局部变量

在JS中,方法(函数)是一个对象,因此可以return

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        function fn(){
            var num = 10;

            function fun(){
                console.log(num);
            }


            return fun;
        }

        var newf = fn();//获得返回的fun函数,相当于把fun拿出来了,这样就可以在 fn的作用域外,使用到了其作用域内的局部变量num啦
        newf(); //10  相当于把【 fn(); → fn调用了fun();】 直接整合为了  【newf();】


    </script>
</head>
<body>
    
</body>
</html>
 

| 浅拷贝和深拷贝

浅拷贝

  • 浅拷贝指的是:不同对象之间赋值,若是基本数据类型,则可以完整独立地赋值给新对象,但是对于对象内的对象类型,则只能赋值地址给新对象

  • 浅拷贝示例

浅拷贝语法(语法糖,即上述for循环遍历赋值的JS的一个内置函数封装)

Object.assign(Ctrl+V的对象, Ctrl+C的对象); 

 

 

深拷贝

  • 原理:利用递归函数,把对象中的对象也用for循环赋值给新的对象

  • 深拷贝没有语法糖,需要我们自己编写函数!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        //old obj
        var obj = {
            name: 'Klee',
            age: 10,
            features: {
                color: 'red',
                hobby: 'fishing'
            }
        }

        //new obj
        var newObj = {}

        //deepcopy
        function deepCopy(newObj , oldObj){
            for(var k in oldObj){
                //获取属性值
                var item = oldObj[k];

                //判断是否是对象,若是,则递归调用deepcopy
                if(item instanceof Array){
                    //新对象的第k个属性是数组  newObj[k]代表对象nowObj的第k个索引的对象(复习for(in)语法)
                    newObj[k] = []; 
                    deepCopy(newObj[k],item);//递归给数组赋值
                }

                //判断是否是数组,若是,则递归调用deepcopy
                else if(item instanceof Object){
                    newObj[k] = {};
                    deepCopy(newObj[k],item);
                }

                //其他情况,则说明该属性是基本数据类型
                else{
                    newObj[k] = item;
                }
            }
        }

        //测试
        console.log('最开始的obj');
        console.log(obj.features.hobby);

        deepCopy(newObj , obj);
        
        console.log('调用了deepcopy后的obj、newObj');
        console.log(obj.features.hobby);
        console.log(newObj.features.hobby);

        newObj.features.hobby = 'eating';
        console.log('修改了newObj中对象的属性后的obj、newObj');
        console.log(obj.features.hobby);
        console.log(newObj.features.hobby);
        


    </script>
</head>
<body>
    
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android基础二:常见的几种组件

关注我&#xff0c;会持续发布关于Android学习的内容&#xff01; 文章目录 前言 一、MaterialButton 二、MaterialButtonToggleGroup 三、TextView 文本组件 四、ImageView控件 总结 前言 本节我们来学习安卓&#xff08;Android&#xff09;的几种常用的组件&#xff0c;包括…

PTA题目 装睡

你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏&#xff0c;你可以发现谁在装睡&#xff01;医生告诉我们&#xff0c;正常人睡眠时的呼吸频率是每分钟15-20次&#xff0c;脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏&#xff0c;请你找出他们…

VMware虚拟机安装ubuntu-16.04.5详细教程

不是每一位程序员都必须玩过linux&#xff0c;现在大多数服务器都是linux系统的&#xff0c;很多生产上的框架和工具都是安装在服务器上的&#xff0c;而且有不少大公司都要求熟悉在linux上开发&#xff0c;因此小编个人觉得大家有必要去了解一下linux&#xff08;现在大部分服…

vue.js毕业设计,基于vue.js前后端分离图书购物商城系统设计与实现(H5移动项目)

功能介绍 【后台管理员功能】 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 广告设置&#xff1a;上传图片和设置小程序首页轮播图广告地…

RK3588-EDGE Ubuntu搭建HTTP服务器

一:开发环境 RK3588-EDGE版本根据指导文档开发环境需要Ubuntu18.04及以上。 本次选择在虚拟机中安装Ubuntu20.04进行开发。 二:安装Apache2 sudo apt-get install apache2 安装成功后配置文件位于“/etc/apache2 ” 其次在“/var/www/html”目录下会生成index.html文件…

mysql 多版本冲突安装(5..5和5.7)

1.我先装好了了5.5但是发现版本过低&#xff0c;需要重新装5.7&#xff08;所以只记录5.7的安装过程&#xff09; zip版的5.7&#xff0c;先解压 创建my.ini文件 [mysqld] port 3306 basedirC:\D\mysql-5.7.29-winx64datadirC:\D\mysql-5.7.29-winx64/data max_connections2…

视频编解码 — 帧内预测

目录 帧内预测 块大小 帧内预测模式 4x4 亮度块的帧内预测模式&#xff08;9种&#xff09; 16x16亮度块的帧内预测模式 8x8色度块的帧内预测模式 帧内预测模式的选择 率失真优化 帧内预测 一张图像中相邻像素的亮度和色度信息是比较接近的&#xff0c;并且亮度和色度…

【windows】实战部署一(安装)SVNserver服务端+SVNclient客户端

1、环境准备 下载SVNserver https://www.visualsvn.com/server/download/ 下载SVNclient https://tortoisesvn.net/downloads.html 语言包位置&#xff1a; 2、安装SVNserver 1、下载后运行msi文件&#xff1a; 2、点击Next下一步&#xff1a; 3、勾选同意&#xff0c;点…

雷达SAR成像仿真的应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

window 下兼容多各低版本的chrome测试

分享我做前端浏览器版本兼容测试遇到Chrome不能多版本共存&#xff0c;存在高版本覆盖低版本问题的解决方案&#xff0c;这个方法不影响Windows系统内已安装的Chrome下载你想要的chrome版本&#xff0c;我是在这里找寻下载版本的&#xff1a;https://www.chromedownloads.net/c…

大数据生态圈及分布式文件系统HDFS实践part2

前言 问题引入 &#xff08;这是以前讲课的时候&#xff0c;给学生准备的一些问题&#xff0c;大家可以思考一下&#xff0c;对理解HDFS很有帮助&#xff09; 1、如果一个文件中有10个数值&#xff08;一行一个&#xff0c;并且都是可以用int来度量&#xff09;&#xff0c; …

关于我在uni-app练手中遇到的坑

目录 页面层级结构的加载和回退 filePath编码 对象的深度克隆 弹幕的加载 ​编辑 uni-app内置浏览器加载视频失败 后台报错 java.io.IOException: 你的主机中的软件中止了一个已建立的连接 安卓里遍历uni-list-item错误 手机自带浏览器无法加载视频 乱码问题 video中…

陆地卫星计划:卫星图像数据和波段介绍

陆地卫星计划&#xff1a;卫星图像数据和波段 学分&#xff1a;美国地质调查局&#xff08;地球上陆地卫星8号图解&#xff09; 陆地卫星项目&#xff1a;超过40年的图像采集 想象一下&#xff0c;能够在任何给定的地点&#xff0c;在任何给定的时间回顾四十年&#xff0c;并…

操作系统之内存管理

文章目录一、 虚拟内存二、内存分段三、内存分页多级页表TLB四、段页式内存管理五、Linux 内存管理一、 虚拟内存 单片机是没有操作系统的&#xff0c;所以每次写完代码&#xff0c;都需要借助工具把程序烧录进去&#xff0c;这样程序才能跑起来。 另外&#xff0c;单片机的 C…

基于单片机的出租车计价器设计

✅作者简介&#xff1a;嵌入式领域优质创作者&#xff0c;博客专家 ✨个人主页&#xff1a;咸鱼弟 &#x1f525; 系列专栏&#xff1a;单片机设计专栏 &#x1f4c3;推荐一款求职面试、刷题神器&#x1f449;注册免费刷题 一、主要功能 本课程设计所设计的出租车计价器的主要功…

python数据结构 操作指南(列表、元组、字典、集合)

数据结构是在python程序运行中必不可少的一部分&#xff0c;在深度学习应用&#xff0c;更是常用来存储模型输出的信息&#xff0c;小编在深度学习开发中过程中&#xff0c;发现有时候我们需要对数据结构中存储的信息&#xff0c;进行复合的条件的筛选&#xff0c;并返回特定的…

python高阶函数心得笔记,python高阶函数知识

递归函数 <1>什么是递归函数 通过前面的学习知道一个函数可以调用其他函数。 如果一个函数在内部不调用其它的函数&#xff0c;而是自己本身的话&#xff0c;这个函数就是递归函数。 <2>递归函数的作用 举个例子&#xff0c;我们来计算阶乘 n! 1 * 2 * 3 * .…

python 绘制BA图, 绘制Bland-Altman, 两个连续变量的一致性分析

一致性分析 分析数据一致性时常用的方法如下&#xff1a; 方法数据类型ICC组内相关系数定量或者定类Kappda一致性系数定类&#xff08;分级&#xff09;Bland-Altman图&#xff08;BA图&#xff09;定量数据 Bland-Altman 常用于生物医学研究论文中评价 两种连续变量测量方法…

MySQL MVCC工作原理

之前的文章中我们讲到&#xff0c;MySQL事务的隔离级别有四种分别是&#xff1a;read uncommitted、read committed、repeatable read和serializable。现在InnoDB下默认的存储引擎是repeatable read&#xff0c;之前也提过在repeatable read下MySQL是通过MVCC来解决幻读的问题。…

Dubbo服务调用扩展点Filter的介绍与使用

扩展点介绍 如上图所示&#xff0c;从服务调用的角度来看&#xff0c;Dubbo 在链路中提供了丰富的扩展点&#xff0c;覆盖了负载均衡方式、选址前后的拦截器、服务端处理拦截器等。 简单来说 Dubbo 发起远程调用的时候&#xff0c;主要工作流程可以分为消费端和服务端两个部分。…