<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
//闭包:能够读取其他函数内部变量的属性的函数。
//1 闭包会似的函数中的变量都被保存在内存中,内存消耗很大,不能滥用闭包,
//否则会造成网页性能的问题。解决方法,在退出函数之前将不适用的局部变量全部删除。
//2 闭包会在父函数外部,改变父函数内部变量的值。所以你把父函数当做对象(object)使用时,
//把闭包当做它的公用的方法(public Method),把内部变量当做它的私有属性(private value),这时要小心,不要随便改变
//父函数内部变量的值。
/**
* 官方”的解释是:
* 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
* 通俗的来说就是:
* JavaScript中所有的function都是一个闭包。
* 不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”
* 当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
*/
/**
* 闭包的应用场景:
* 1 保护函数内的变量安全 :不与外部变量冲突,不能在外部访问
* 2 在内存中维持一个变量
* 3 通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问
*/
function f1(){ //当f1作为对象使用时。
//当f1作为方法使用时。
//局部变量
var n=0;
//公共方法(全局域的方法可以看做全局域的属性)
f3=function(){ //闭包
n++;
alert(n);
};
//局部方法(局部变量)
function f2(){
alert(n);
}
this.show=function(){
n++;
alert(n);
};
//return f2; //闭包
}
//----当f1作为方法使用时
//var f=f1();
//f(); //0
//f3();//1
//f();//1
//f3();//2
//alert(n);//undefined 外部的方法无法访问内部的属性
//----当f1作为对象(构造函数使用时)
/*
var t=new f1();
alert(t.n);//undefiend 无法访问,如果把方法看做类的话,此时的局部变量,相当于全局的属性??
//alert(t.f3());//t3 is not a function
alert(t.f3);//undefined 由于作用域链的存在,外部的变量时无法访问内部的定义的变量的。
//此时f3虽然是全局作用域上的方法,但是并不是f1的属性,f1并没有f3这个属性,所以为undefined
alert(t.f2);//undefined
*/
var ff=new f1();
/**
* 对象定义的步骤:
* function Obj(params){
* //do something
* }
* var obj=new Obj(params);
* 1 var obj={};
* 2 Obj.call(obj,[params]); //如果这个方法有返回值的话,obj包含this.的属性
* //复制属性
* 3 obj.prototype=Obj.prototype; //保持原型链
*/
//alert(ff.show); //(有返回值时)undefined
ff.show(); //1 局部变量给每一个实例复制了一份,但在ff无法直接访问它。
//属性直接访问。
//-------是不是可以这样理解?局部变量看成对象的private属性,需要提供公共的set方法赋值,get获取方法。
//--------------------------而this.的属性看成public属性,可以通过构造函数赋值。
//作用域?
/*
作用域 方法域 全局域
public √ √ //this.属性 (全局域,obj.value)
private √ × //局部变量 (函数内部直接使用)
function Person(){
var t=10;
this.showt=function(){
alert(t);
};
this.showtt=function(){
this.tt++;
alert(this.tt);
}
}
Person.prototype.tt=100;
var p=new Person();
//alert(p.tt);//undefined
p.showtt();//101
var p1=new Person();
p1.showtt();//101
function Student(){
Person.call(this);
}
var s=new Student();
// s.showt();//
//s.showtt();//
*/
// var ff1=new f1();
// ff1.show();//1 局部变量给每个实例复制了一份,
//js中核心概念:
//作用域链
//原型链
//闭包
//立即执行的匿名函数:
//闭包
//模块化
(function(outParams){ //
var _privateProperty="private Property";//定义自己的私有变量 ,设置默认值
//
//this.set();
//this.get();
function _privateMethod(){//适合于写工具方法
//do Somethings
alert("private method!!");
}
publicProperty="public Property";//public 可以被外部修改的,这样做不好!
//可以封装一个内部的闭包,被外部引用,引用一些可以被调用的方法
//$("").popup(function(){},{
// options;
// });
var out=function(){
//callBack的回调函数
var version="1.5.0Version";
//options参数
this.sum=function(callBack,options){
callBack(version,options);//执行回调函数
};
this.sum1=function(callBack,options){
//必填参数,可选参数
};
//set
this.setProperty=function(_private){
_privateProperty=_private;
};
//get
this.getProperty=function(){
return _privateProperty;
};
};
window.out=out;//可以再外部直接调用了
})(outParams);
var jquery=new out();
alert(jquery.getProperty()); //private property
jquery.setProperty("private2");
alert(jquery.getProperty()); //private2
jquery.sum(function(version,opt){
//执行求和的回调
alert(version+":"+(opt.p1+opt.p2)); //110
},{
p1:10,
p2:100
});
var outParams=10;//外部变量被闭包引用时,会存在内存中。
//即使把外部变量删除掉,仍然会被保存
</script>
<body>
</body>
</html>相关推荐
STM32H743必要外围电路分析
写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...
JavaScripr学习(2)
<html><head><script> var a=10; function f1(){//a=11; //-----①//var a; //-----② a=11; b=20; //如果在函数内部没有申明变量,变量视为全局变量 编译时自动会给b声明变量 var b } f1(); alert(a); //在①的情况下,是给全局变量a赋值成11...
CPU也能跑大模型?手把手教你用vLLM离线部署Qwen2.5-7B-Instruct(附性能优化技巧)
本文详细介绍了如何在CPU服务器上高效部署Qwen2.5-7B-Instruct模型,通过vLLM框架和一系列优化技巧实现离线推理。内容包括环境配置、模型加载优化、性能调优及生产环境部署方案,帮助开发者在资源有限的情况下也能运行大语言模型。
【Javascript】什么是事件
JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。 比如说,当用户单击按钮或者提交表单数据时,就发生一个鼠标单击(onclick)事件,需要浏览器做出处理,返回给用户一个结果。 主要事件表:
Revit二次开发——不启动Revit,做rvt文件数据导出
Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N
双翌视觉系统配合机械手大视野定位案例(单目标带角度抓取)
一、定位原理概述 1.系统构架 视觉定位系统采用正向打光方式,光源在机械手上方,CCD从上往下拍摄,进行图像分析定位。相机将计算出的像素坐标转换为机械手的物理坐标,视觉软件与机械手进行网口通讯,将视野内物料的物理坐标发送给机械手,机械手抓取物料放在指定工位。 2.相机标定概述 系统采用宫格标定确定像素坐标和物理坐标一一对应关系,同时利用3点或者多点旋转标定求出旋转中心 系统采用宫格标定,自定义行列数和间距及旋转角度,通过机械手发送的当...
高德坐标系转天地图坐标系(GCJ02转WGS坐标系)
高德坐标系转天地图坐标系(GCJ02转WGS坐标系) private static double PI = 3.14159265358979324; public static double[] gcj02ToWgs(double lng, double lat) { double a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 double ee = 0.00669342162296594323; // ee: 椭球.
CNN经典网络模型(二):AlexNet简介及代码实现(PyTorch超详细注释版)
CNN经典网络模型之一:AlexNet,本文包含其简介及代码,在PyTorch中实现,进行超详细注释,适合新生小白阅读学习~
javascripr如何设计弹出输入框并在网页内输出输入内容
如何把在对话框里输入内容输出到网页里,需要先定义一个变量,用var或let都可以。javascript如何设计弹出输入对话框。let a=prompt('请输入内容')这里就需要用到prompt语言。prompt(对话框内容)然后用输出语句输出输入内容。假定变量名为a,代码是。
PLCopen运动控制避坑指南:单轴功能块常见报错排查(基于SM3_Basic函数库)
本文深入解析PLCopen运动控制中单轴功能块的常见报错问题,基于SM3_Basic函数库提供实用排查指南。从功能块逻辑错误与硬件报错的甄别技巧到高频报错场景的解决方案,帮助工程师快速定位并解决运动控制系统中的稳定性问题,提升工业自动化设备的运行效率。
【多媒体交互】Unity+普通摄像头实现UI事件分析
利用摄像头捕捉用户的手势或动作,结合坐标映射与事件系统触发UI交互
流程控制语句
JAVA流程语句有几下几种: 一、if语句: 1.if语句:如果满足条件语句,则执行执行语句; if(条件语句){ 执行语句; ....; } 2.if....else语句:如果满足判断语句,则执行执行语句1,否则执行执行语句2; if(判断语句{ 执行语句1; .....; }else{...
【异常】Claude Code 400错误(Extra inputs are not permitted)解决方案
摘要:Claude Code 2.0.37+版本因API请求包含未支持的custom.input_examples参数导致400错误,使核心功能失效。解决方案是降级至稳定版v2.0.32:先卸载当前版本(npm uninstall -g @anthropic-ai/claude-code),再安装指定版本(npm install -g @anthropic-ai/claude-code@2.0.32),最后验证请求是否恢复正常。该问题确认在v2.0.32版本不存在。(148字)
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
javascripr 中什么是事件
什么是事件 JavaScript 创建动态页面。事件是可以被JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。 比如说,当用户单击按钮或者提交表单数据时,就发生一个鼠标单击(onclick)事件,需要浏览器做出处理,返回给用户一个结果。 主要事件表: 任务 此节没有任务,快快进入下节学习鼠标事件。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
JavaScripr操作
window对象 浏览器对象模型(BOM)是JavaScript的组成之一 ,它提供了独立于内容与浏览器窗口进行交互的对象,使用浏览器对象模型可以实现与HTML的交互。 window对象是整个BOM的核心 window对象也称为浏览器对象。当浏览器打开HTML文档时,通常会创建一个window对象如果文档定义了一个或多个框架,浏览器将为原始文档创建一个window 对象,同时为每个框架另外创建一个window对象。 使用BOM通常可实现如下功能 弹出新的浏览器窗口 移动、关闭浏览器窗口及调整窗口的大小。 在
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
javascripr 的typeof
Document 神奇的typeof 因为数组和对象的typeof结果都是object;那么如何更准确的判断这是个数组还是和对象呢? var a = typeof(12121); console.log(a);//number console.log(typeof(a));//string var b = typeof(tru
JavaScripr基础知识
JavaScript简称JS,是一种弱类型的语言,在网页里使用的脚本语言,放在页面<body></body>的下面使用,写作<script type=”text/javascript”></script>。 输出语法:弹出信息 alert = (‘输出信息内容’); ,保存后打开网页会看到弹出一个对话框里面有“输出信息内容”字样,内容随着输出内容改...
JavaScripr中常遇到的错误和this关键字
错误与异常 概念 错误与异常是什么错误,指程序中的费正常运行状态,在其他编程语言中称为‘异常’或‘错误’。解释器会为每一个错误创建并抛出一个Error对象,其中包含错误额描述信息。通过使用JavaScript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理带啊与核心业务代码实现分离。错误与异常处理在应用中的重要性是毋庸置...
如何用javascripr动态添加table?
来自 csdn上的一个回复。 http://topic.youkuaiyun.com/t/20020315/09/577418.html#Top 转载于:https://www.cnblogs.com/Godblessyou/archive/2010/07/17/1779390.html
java实现javascripr引擎_DuktapeJava-Android平台的JavaScript引擎
DuktapeJava 是针对 Android 平台封装的 Duktape JavaScript 引擎;实现Javascript 和 Java的无缝调用。初始化DuktapeEngnine@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...
java实现javascripr引擎_JavaScript模版引擎的基本实现方法浅析
模板分离了数据与展现,使得展现的逻辑和效果更易维护。利用javascript的Function对象,一步步构建一个极其简单的模板转化引擎模板简介模板通常是指嵌入了某种动态编程语言代码的文本,数据和模板通过某种形式的结合,可以变化出不同的结果。模板通常用来定义显示的形式,能够使得数据展现更为丰富,而且容易维护。例如,下面是一个模板的例子:如果有如下items数据:items:[{ text: 'te...
java实现javascripr引擎_一篇文档掌握Jdk8中Javascript引擎Nashorn的使用方法
翻译和编译自: http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/toc.html用Notepad++新建一js文件。F6执行命令为:npp_savecmd.exe /c jjs.exe -fx "$(FULL_CURRENT_PATH)"代码内容例如以下://查看包类型print(java);print...
Javascripr 高德坐标系转天地图坐标系(GCJ02转WGS坐标系)
<script> var PI = 3.14159265358979324; function transformLat (x, y) { var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x)); ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * ...
javascript学习总结
1、js入门 js技术怎么用?用在那里? js的基本介绍 浏览器历史 如何理解是事件驱动的脚本语言 2、js语法 基本数据类型 js运算符 js流程控制 js循环控制语句 如何调试js代码 处理js bug 3、js分类 js函数的分类 js的函数调用过程 4、js数组的介绍 数组的基本使用 数组常用的属性和函数 js的二维数组 js排序 5、js查找 顺
1万+



被折叠的 条评论
为什么被折叠?



