180330 预编译

HDR视频技术之七:逆色调映射 HDR 技术说是继 4K 之后视频领域的又一次重大技术突破,不仅提高图像的动态范围,同时也提供了更宽的色域,并提升了画面在高光和暗部的细节信息,带给观看者更加真实的视觉体验。但作为 HDR 产业链的核心,内容短缺的问题仍然是 HDR 普及和成熟的重要限制因素。众多电视厂商将 HDR 技术作为其产品规划中的重要技术,主要是在硬件方面进行提升。而由于 HDR 内容制作对于设备要求较高,对采集、调色、显示等多方面都需要较高的质量要求,内容制作的复杂度和周期长等因素,导致了 HDR 内容的匮乏。 阅读详情

JS编译过程

  1. 语法分析:JS引擎通篇扫描,有低级错误直接报错不执行。
  2. 预编译
  3. 解释执行

执行期上下文

  • 当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,执行上下文被销毁。

预编译

window是全局对象,在全局范围声明一个变量,则该变量成为window的一个属性。
imply global暗示全局变量:任何变量如果未经声明就赋值,都会变成window全局对象的属性。

var age = 18;
function (){
    var haha = age = 20;
}
show();    
console.log(a)  // age  ->  20

函数预编译过程:

  1. 创建执行期上下文 AO = { };
  2. 找出全部变量(变量声明!var)及形参,并赋值undefined。
    AO –> {a:undefined,b:undefined,c:undefined};
  3. 形参实参相统一
    AO –>{a:3,b:4,c:undefined};
  4. 寻找函数声明(函数表达式不好使!),值赋给函数体
    AO –>{a:3,b:4,c:function c () {} };
function show(a,b){
    console.log(a);  //3
    console.log(b);  //4
    console.log(c);  //function c(){}
    var c = 20;
    function c (){};
    c = 30;
    a = 20;
}
show(3,4);

全局预编译过程:

  1. 创建全局执行期上下文GO = { }
  2. GO -> { this:window,document:,a:,b: }
  3. GO -> {this:window,document:,a:undefined,b:function(){} }

作用域[[scope]]:

只有JS引擎有权限访问。
存储了执行期上下文的集合。
一个函数被定义时,它的[[scope]]指向的对象(scope chain)的第0位存储的就是该函数所在的执行环境。

作用域链(scope chain):

[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链。

a{[[scope]]:{}}
//   属性(作用域scope)    值是一个对象(作用域链scope chain)

1.语法分析后创建全局执行期上下文GO -> {...}
2.此时定义 a.[[scope]] -> {0:GO}
3.函数执行时创建函数执行期上下文AO -> {...}
4.此时执行 a.[[scope]] -> {0:AO,GO}


这里写图片描述



var global = 300;

function test() {
    console.log(global); // AO: undefined
    var global = 400;
    console.log(global); // 400
}
test();


var global = 100;

function test() {
    console.log(global); // AO :没有global  GO:100
    global = 200; //不是变量声明  
    console.log(global); // 200
}
test();
console.log(global); // 200
function a(){
    function b(){  //  b.[[scope]] -> {0:AO2,1:AO1,2:GO}
        var b = 234;
    }
    var a = 123;
    b();
}
var glob = 100;
a();

这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述


闭包

  • 当内部函数(内部引用值)被保存到外部时,将会生成闭包。
  • 闭包会导致原有作用域链不释放,造成内存泄露。
function a() {
    function b() {
        var bbb = 234;
        document.write(aaa);
    }
    var aaa = 123;
    return b;
}

var glob = 100;
var demo = a();
demo();  // 函数b被保存到外部,因此产生闭包
//此时延用之前的作用域链,函数执行期上下文不会被删除

// 用处,原本输出aaa的值是undefined,但是这样之后是111

// b.[[scope]] -> {0:aAO,1:GO}
// b/demo.[[scope]] ->{0:bAO,1:aAO,2:GO}
// demo.[[scope]] -> {0:aAO,1:GO}

这里写图片描述

使用闭包

  • 缓存
function add() {
    var num = 0;

    function get() {
        num++;
        console.log(num);
    }
    return get; 
} 

//get函数被保存到外部,
//它的作用域链scope chain -> {0:getAO,1:addAO,2:GO}

var outerGet = add(); 
outerGet(); // 1   
outerGet(); // 2
outerGet(); // 3  
//   一直操作的是作用域链当中的num值,即 接着上一次的num运算结果
//    每次执行,使用的都是同一个AO, AO没有被销毁

//---------------------------------------------------------
function add() {
    var num = 0;
    num++;
    console.log(num);
}
add(); // 每次执行会创建一个新的AO
add();
add();

// ----------------------------------------------------------

function add(){
    var num1 = 1;
    var num2 = 1;
    function get1(){
        num1++;
        console.log(num1);
    }
    function get2(){
        num2++;
        console.log(num2);
    }
    return [get1,get2];   // 注意返回多个值时的技巧
}
var outerGetALL = add();
outerGetALL[0]();
outerGetALL[0]();
outerGetALL[1]();
outerGetALL[1]();
  • 私有化变量

立即执行函数

  • 此类函数没有声明,在一次执行过后即释放。
  • 可以做初始化工作。
(function () {}());
(function () {})();
//函数声明被()包裹,被强制转换成函数表达式
//函数([圆括号包裹函数声明形式],[函数表达式形式])定义时就用()执行,
//如果不产生闭包,函数就会被销毁。

+function() show(){}() 
// + 等其它运算符 可以将函数声明转换成函数表达式
fucntion show (){

}();
//不能执行,只有函数表达式可以被()直接执行
--------------------------------------------------------------
var test = function(){

}();
//可以执行,因为是函数表达式
--------------------------------------------------------------
var test = function show (){

}();
//可以执行,因为是函数表达式
--------------------------------------------------------------
var test = function(){
}
//执行方式有两种:
变量表达式执行:test();
非变量表达式执行(定义时直接执行):[var test(){}] ();
//当函数表达式选择执行方式----(执行非变量的函数表达式)方式时
//表达式会在执行后销毁
--------------------------------------------------------------
var test2 = function show (){
    console.log(1);
    return show;
}();
test2();// 可以执行,形成闭包才没被销毁

应用

var a = [];
for (var i = 0; i < 10; i++) {
    a[i] = function() {
        console.log(i); // i在GO中
    }
}
a[0](); // 10
a[1](); // 10


var a = []; //定义了一个数组,每次循环都会向数组各索引存储一个输出函数
for (var i = 0; i < 10; i++) {
    (function(i) { // [[scope]] -> {0:nAO -> {i:0} 1:GO -> {}} 保存到外部,形成闭包,存档
        a[i] = function() { // a[i].[[scope]] -> {0:a[i]AO,1:nAO,2:GO}  a[i]AO每次执行完销毁
                console.log(i);
            }
            // return  因为将函数存到了全局的数组当中,相当于将函数return到外部
    })(i);
}

a[1](); // 产生闭包,立即执行函数不会被销毁,相当于普通函数
a[9](); // 每一次循环,将i=1~9传入函数

对象知识点补充

对象属性的调用:o.attributes

function test (){

}
test();

// 相当于

function test (){
    this:window
}
window.test();

//谁(对象)通过.方式调用了函数,谁就是this

如果一个函数是构造函数,则会隠式的创建this对象,并返回this

function CarFactory (){
    // var this = {
    //  wheel:4,
    //  door:2,
    //  distance:0,
    //  run:function(){}
    //  }
    this.wheel = 4;
    this.door = 2;
    this.distance = 0;
    this.run = function (){
        this.run = function(){
            this.distance += 100;
        }
    }
    // return this
}
【Halcon-1D测量】measure_pairs 函数功能(用于提取垂直于矩形/环形弧主轴的直边对) HALCON算子measure_pairs是1D测量模块的基础工具,专用于提取垂直于矩形/环形弧主轴的直边对。该算子通过振幅阈值和灰度过渡规则(如positive/negative)进行边对分组,支持_strongest后缀选择最强边缘避免误配对。输出包含边缘坐标、振幅及内外间距(IntraDistance/InterDistance)。关键限制包括仅适用于直边、Sigma需≤0.5×测量长度,且忽略图像域。相比模糊版本算子,它更适用于边缘清晰的简单场景(如电子元件间距测量)。典型应用需配合gen_meas 阅读详情

相关推荐

无刷直流电机计算转速

一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ...

meimiaorenshengqq的博客 9683

javascript之预编译

首先要记住:预编译发生在函数执行的前一刻 先来一个小知识: 函数声明整体提升 test(); function test(){ ...//省略n行代码 } 在预编译阶段,会把函数声明提升到代码顶部: function test(){ .... } test(); 变量声明提升 console.log(a); var a=123; 在预编译阶段,会把var声明提升...

weixin_33830216的博客 129

1104全部报表版本号-银监会报表

G4B_Ⅲ(a)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第一档)》G4B_Ⅲ(b)X1《与非中央交易对手的证券融资交易对手信用风险违约风险计算表(权重法)(第一档)》G4B_Ⅲ(a1)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第二档)》Ⅲ(a)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第二档)》Ⅲ(a1)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第一档)》

数字化老司机 6295

Javascript笔记:作用域和执行上下文

一、作用域 Javascript的作用域规则是在编译阶段确定的,有声明时的位置决定。 JS中有全局作用域,函数作用域,块级作用域(ES6引入)。 1. 全局作用域 在整个程序生命周期内都是有效的,在任意的函数内部都能访问的变量或函数拥有全局作用域。以下几种情形拥有全局作用域: 1. 定义在最外层的变量和函数,拥有全局作用域。 2. 未...

A1_00078的博客 512

神领物流-day01-项目概述

公司从2019年开始业务快速扩张,网点数量从138家扩展至540家,车辆从170台增长到800台。同时,原有的系统非常简单,比如车辆的调度靠人工操作、所有的货物分拣依靠人员,核心订单数据手动录入,人效非常低。随着业务不断演进,技术的不断提升,原有运输管理系统已无法满足现有快速扩展下的业务需求,但针对现有系统评估后发现,系统升级成本远高于重新研发。因此,公司决定基于现有业务体系进行重新构建,打造一套新的TMS运输系统,直接更替原有系统。

心飞为你飞 2255

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

JavaScript学习总结笔记之作用域、闭包、立即执行函数

前言 JavaScript总结笔记篇仅是记载本人学习过程中的一些总结,为了梳理一下知识点,督促自己不断加强学习。文中有些是源自官网,有些是搜集资料,有些是个人观点,难免存在某些知识点疏漏或者是有错误的地方,如果错误之处,希望看到的小伙伴能及时提个醒,避免误导其他小伙伴,也希望我的总结能帮助到正在学或者是将要学习JavaScript的小伙伴们!大家一起努力,早日成为IT界的大神! 作用域、闭包、...

你说我的名称可爱不可爱♕ 477

DeepSeek-OCR 本地部署使用教程(附完整环境配置与推理示例)

DeepSeek-OCR是由DeepSeek AI推出的开源OCR模型,支持高精度文档识别与结构化输出(如Markdown转换)。本文提供了详细的本地部署指南,包括系统要求(推荐Linux+A100 GPU)、环境配置(Python 3.12.9+PyTorch 2.6.0+CUDA 11.8)、模型下载及两种推理方式:高性能的vLLM(适合批量处理)和灵活的Transformers(适合调试)。支持多种分辨率模式和提示词模板,适用于合同识别、PDF转换等场景。常见问题包括显存优化和性能调优建议。

qq_58607032的博客 6723

闭包、上下文、this

闭包/上下文/this 由cnblogs听风是风博客整理 闭包 闭包是指有权访问另一个函数作用域中的变量的函数,如下 var myObject = (function () { var value = 0; return { increment: function (inc) { value += typeof inc === 'number' ? inc : 1; }, getValue: function () { return value;

qq_34676391的博客 323

YOLOv11 改进策略 | HWD:引入 Haar 小波变换,减少信息丢失

在卷积神经网络(CNN)中,下采样(Downsampling)是降低特征图分辨率、扩大感受野的关键操作,通常通过最大池化(MaxPool)或步长为 2 的卷积(Strided Convolution)实现。然而,这些方法在降低分辨率的同时,往往会丢失图像中的高频细节信息(如边缘、纹理)和精确的空间位置信息,这可能对后续特征提取和目标检测精度产生不利影响,尤其是对于小目标和需要精细定位的任务。

走向CTO的路上... 1791

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 225

AO(Activation Object) 执行上下文

AO对象 函数执行的前一刻,会创建一个称为执行期上下文的内部对象(AO)。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕时,它所产生的执行上下文会被销毁。 代码示例: function test(a,b) { console.log(a); //function a () {} console.log(b); // undefined var b = 234; console.lo

优快云_aliang的博客 597

【系统架构设计师】论文:论虚拟现实技术的应用与发展

虚拟现实技术是当前科学研究的热点,同时也是国家大力支持发展的核心技术之一。所谓虚拟现实,就是通过计算机等虚拟手段来构造一个非常接近真实世界的虚拟环境,它主要体现在视觉、触觉、嗅觉等方面的逼真模拟来达到高度的沉浸性,也就是如我们通常所说的“身临其境”。

数据知道的博客 1万+

JavaScript初级篇—作用域、闭包、立即执行函数精解

作用域精解 [[scope]] [[scope]]:每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一个。[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合。 作用域链 作用域链:[[scope]]中所存储的执行器上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链。 执行期上下文 执行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象(AO/GO)。一个执

xiomarazark的博客 180

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

执行上下文

执行上下文一般分为全局执行上下文和函数执行上下文。 全局执行上下文只有一个,它是由浏览器创建的,也就是常说的 window 对象。 函数执行上下文可能会有多个,当一个函数被调用时,就会产生一个函数执行上下文。当函数执行时,会创建一个称为执行期上下文的内部对象,函数执行就会产生执行期上下文(独一无二的),执行完一次会销毁一次。 每个执行上下文中都会有三个重要的属性:this、变量对象(VO)和 作用域链([[scope]]) [[scope]]:存储作用域执行期上下文的集合。 所有的执行上下文都会被执行上下文

gercke的博客 3184

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

js笔记——作用域、作用域链精解、闭包、立即执行函数’

作用域、作用域链精解 运行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文被销毁。 查找变量:从该函数的作用域链的顶端依次向下查找 [[scope]]:每个javascript函数都是一个对象,对象中有些属性我们可以...

芊雨的博客 411

JS之闭包(预编译=>执行期上下文=>作用域及作用域链=>闭包=>立即执行)

预编译: 生成全局及函数内部的执行期上下文 执行期上下文==>以函数为例:(全局执行期上下文(GO)的创建类似) (1)在开始执行的前一刻,创建AO(activation object); (2)将形参和声明的变量放入OA,值为undefined; (3)将实参和形参统一; (4)在函数体里找到函数声明,值赋予函数体。 (5)在执行相应赋值语句时,修改声明的变量。 需要注意:函数表达式,如“...

weixin_34292287的博客 238

180326 数组

概述 数组是值的有序集合,其中值称作‘元素’,对应位置称作‘索引’ 数组继承Array.prototype中的属性 数组是对象的特殊形式,数组索引实际上和碰巧是整数的属性名差不多 创建数组 数组直接量 var arr = [1,2,'a']; var arr1 = [[1,{x:1,y:2}],[2,{x:3,y:4}]]; // 可以包含对象直接量或其他数组直接量。 ...

simpleone_的博客 492

[other]电脑知识

积累

simpleone_的博客 351

180328 正则表达式

什么是正则表达式 检索文本时,可以对字符串内容进行模式匹配。RegExp 就是这种模式。用RegExp对象表示正则表达式。 创建正则表达式 直接量定义 /pattern/attributes var regExp = /abc/; //可以添加修饰符,可以同时使用 /abc/g 全局匹配,查找所有匹配 /abc/i 大小写不敏感 /abc/m 执行多行匹配 ...

simpleone_的博客 320

《JavaScript DOM 编程艺术(第二版)》笔记

第3章 DOM 即使在整个文档里这个标签只有一个元素,getElementsByTagName也返回一个数组。此时的数组长度是1。 HTML5 DOM 新增 getElementsByClassName 在使用类名获取标签匹配时,如果有多个类名,类名顺序和带有更多类名都可以匹配。 检查某项数据是否是null时,我们其实是在检查它是否存在。 通过setAttribute对文档做出修改后,在通过...

simpleone_的博客 318

180731 知识点复习

1、计时器 window对象的方法:JS中重要的全局函数。 setTimeout (code执行代码, millisec延迟毫秒数) — 函数在指定的毫秒数后执行。 clearTimeout (timeoutID) setInterval() 函数在指定的毫秒数间隔里重复调用。 clearInterval() tips:即使setTImeout()传入0毫秒,函数也不会立刻执行,会进...

simpleone_的博客 279

实例练习

//1做一个循环,计算累加到300需要的次数--------------------------------------------------------- // var num = 1; // var times = 0; //1 // var realdo = true; // for (var i = 1; realdo; i++) { // num += i; // ...

simpleone_的博客 273

180420 异步加载JavaScript

部分转自韩子迟,原文地址 js时间线 1、创建Document对象,开始解析web页面。解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段document.readyState = ‘loading’。 2、遇到link外部css,创建线程加载,并继续解析文档。 3、遇到script外部js,并且没有设置async、defer,浏览器加载,并阻塞,...

simpleone_的博客 244

181206 vscode

显示tab和空格: setting.json { "editor.renderControlCharacters": true, "editor.renderWhitespace": "all" } 可视区域折行显示: setting.json { "editor.wordWrap": "on" } 更改字体: setting.json { "editor.font.

simpleone_的博客 243

180406 客户端JS WebAPI

Date对象 var oDate = new Date(); oDate.getDate() —— 几号 oDate.getDay() —— 星期几 [0-6] oDate.getFullYear() —— 年 oDate.getMonth() —— 月 [0-11] oDate.getHours() —— 时[24时] oDate.getMinutes() —— 分 ...

simpleone_的博客 242

积累

重定向:重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置。 CDN(缓存服务器):Content Delivery Network 内容分发网络。 基本思路:尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各...

simpleone_的博客 240
上一篇: 实例练习
下一篇: 180331 原型
simpleone_
博客等级 码龄9年 14粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值