当前位置: 首页 > news >正文

js中Fucntion的意义

在js中,我们常常如下方式写函数:

function fn(){console.log("这是一个函数.");
};
fn();

69a1366395bf42598f5587808f530fe3.png

 在js中,函数本质就是一个对象。

那么,结合我的上一篇文章:通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系-CSDN博客

刚刚写的这个函数 ,实际上是一个“实例对象”。

那么,它就有原型对象(类)和构造函数。

function fn(){console.log("这是一个函数.");
};
console.log(fn.__proto__);
console.log(fn.__proto__.constructor)

1cb3c4de3193414db3fff0c02c1629c7.png 

接下来,需要逆向思维一下:如果知道了构造函数,是不是就可以new出实例对象呢?

参考如下代码:

//构造函数
function Person(name,age)
{this.name=name;this.age=age;this.sleep=function(){console.log("睡觉");}
}//p1是实例对象
var p1=new Person("张三",20);

接下来,我们的构造函数成了Function(),那么new它一下,就出来了实例对象【也就是函数】。

var fn1=new Function("console.log('我是一个函数');");
console.log(fn1);
fn1();

c4c81de773474cd1996ccb0c4338013e.png 

由此可以得到两点:

(1)函数fn1实际上是Function构造函数的实例对象;

(2)Funciton的参数,就是函数fn1的函数体。 

所以,在有些场景下,就可以将普通写法的fn,变成用Function表示的形式,如:

!function(){debugger;
}();

等同于

var fn=new Function("debugger");
fn();

或者

new Function("debugger")();

 

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringCloud Alibaba五大组件之——Sentinel
  • vue3-vben-admin开发记录、知识点
  • 游戏淡入淡出效果
  • (笔记自用)LeetCode:快乐数
  • 【Elasticsearch】-图片向量化存储
  • 网络原理之IP协议(网络层)
  • 如何查看线程
  • 【STM32系统】基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流)——文末工程资料下载
  • Go语言基础学习01-Liunx下Go开发环境配置;源码组织方式;go build/install/get详解
  • Linux Shell: 使用 Expect 自动化 SCP 和 SSH 连接的 Shell 脚本详解
  • 【Java】注解与单元测试的使用【主线学习笔记】
  • MySQL高阶1965-丢失信息的雇员
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器
  • MICS:PythonJail沙箱逃逸(持续更新中)
  • 初识C#(二)- 流程控制
  • 07.Android之多媒体问题
  • Angular6错误 Service: No provider for Renderer2
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java 网络编程(2):UDP 的使用
  • Java面向对象及其三大特征
  • JS题目及答案整理
  • oldjun 检测网站的经验
  • Redux 中间件分析
  • Xmanager 远程桌面 CentOS 7
  • zookeeper系列(七)实战分布式命名服务
  • 工作手记之html2canvas使用概述
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 警报:线上事故之CountDownLatch的威力
  • 少走弯路,给Java 1~5 年程序员的建议
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 突破自己的技术思维
  • 一天一个设计模式之JS实现——适配器模式
  • 应用生命周期终极 DevOps 工具包
  • 最简单的无缝轮播
  • 白色的风信子
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • # 达梦数据库知识点
  • #### golang中【堆】的使用及底层 ####
  • #单片机(TB6600驱动42步进电机)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $().each和$.each的区别
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (六)c52学习之旅-独立按键
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)母版页和相对路径
  • .chm格式文件如何阅读