Javascript - 存储为变量时立即执行的函数?

     2023-04-13     185

关键词:

【中文标题】Javascript - 存储为变量时立即执行的函数?【英文标题】:Javascript - Function Being Executed Immediately when Stored as Variable? 【发布时间】:2015-09-25 07:03:33 【问题描述】:

第一次发帖。编程新手。

在 Javascript 中,当我声明一个新变量并将这个新声明的变量设置为存储一个函数时,该函数是否在代码运行时立即执行(执行上下文)?

例如,

function Person() 

    console.log(this);
    this.firstname = 'John';
    this.lastname = 'Doe';



var john = new Person();

变量 john 是否在同一行执行函数“Person”的同时被声明?

【问题讨论】:

使用关键字new,您正在创建一个可以使用变量john 引用的新对象。删除new 并将调用Person 的结果存储在john 中。就如此容易。 W3schools 为初学者提供了很好的教程。 变量声明在任何代码执行之前被处理,所以 john 在任何代码运行之前被创建并赋值为 undefined。同样,函数声明也在执行之前被处理,所以Person在执行开始之前也存在。当执行运行时,john 被赋值为右边表达式的返回值,它是 Person 的一个实例。 @Rinzler — 请展示 w3schools 解释如何创建执行上下文和建立环境记录的位置。我认为 OP 不会在那里学到这一点。 为什么投反对票?这个问题可能看起来很幼稚,但它很清楚并且写得很好 @RobG 我说:Allah Akbar 有一个很好的初学者教程,我没说别的。 【参考方案1】:

您复制/粘贴的是对象创建。这意味着 john 是一个新的 Person 对象。 Person 是对象的类。 Person 函数中的 this 键与新创建的对象的实例相关。不要被function关键字滥用,这是一个令人困惑的(由于历史原因)JS关键字。 Person函数可以看作是一个对象构造函数。

EDIT : 去掉了题外话(题外话真的太多了)

【讨论】:

补充一点:如果你看到new someFunction() () 表示它正在那个特定时刻执行,new 意味着它不使用return 值,而是创建该函数的新实例。【参考方案2】:
var john = new Person();
    变量john 已创建。

    RHS 被执行。

    2.1。 new 运算符调用Person 的构造函数。每个函数都隐含一个constructor()。这会导致创建对象。

    返回 RHS 评估结果(在本例中为对象)。

    结果被分配给 john,或者换句话说,现在 john(一个引用变量)将引用作为在 Person() 上执行的 new 运算符的结果而创建的对象。

【讨论】:

这是一个 javascript 新手,RHS 是什么? @StephanBijzitter RHS 是= 运算符的右侧表达式。【参考方案3】:

如果你在函数后面加上()(optionalArgumentsHere)(有些函数带参数,有些不带参数),则表示它是一个函数调用,它将被执行。如果要将函数本身分配给变量,则需要省略()。这是可能的,因为函数是 JavaScript 中的对象(并非每种语言都如此)。

所以这里发生的情况是您声明了一个变量(实际上,由于提升,您更早地声明了它,正如 Pablo 所解释的),您执行 new Person() 并将结果分配给变量。

如果你调用了类似的函数

function fun() 
    return 5;


var x = fun();

您将把函数的返回值分配给变量。但是您的情况很特殊,因为您使用的是new。这意味着Person 是一个构造函数,它用于创建Person 类型的新对象。在该构造函数中,您使用 this 关键字将属性附加到新创建的对象。 new Person() 调用返回对象,即使 return 没有被显式调用。

【讨论】:

【参考方案4】:

在 Javascript 中,变量定义是“提升”的。意思是你贴的代码和后面的代码...

var john;
function Person() 
    console.log(this);
    this.firstname = 'John';
    this.lastname = 'Doe';

john = new Person();

... 是相同的,因为编译器会将变量声明提升到当前上下文的开头。所以,答案是否定的,先声明变量,然后将函数作为构造函数执行,然后将新创建的对象分配给该变量。

您可以找到更多信息here

【讨论】:

这不是他问题的答案。 问题是在构造函数执行时是否声明了变量。我的回答表明该变量是之前声明的。无论如何,我已经对其进行了编辑以使其更清晰

javascript闭包立即执行函数(代码片段)

JavaScript闭包文章目录JavaScript闭包一、为什么要闭包二、让某些变量得以常驻内存1.原理2.Why立即执行函数?三、让外部得以访问函数内变量四、立即执行函数总结#前言-什么是闭包函数闭包函数是声明在另一个函数内的函数,是被... 查看详情

为啥我不能在立即执行语句中使用绑定变量?

】为啥我不能在立即执行语句中使用绑定变量?【英文标题】:WhyIcan\'tuseabindvariableinanexecuteimmediatestatement?为什么我不能在立即执行语句中使用绑定变量?【发布时间】:2011-08-0205:23:16【问题描述】:当我为executeimmediate构建动态... 查看详情

javascript自动执行函数(立即调用函数)

开头:各种原因总结一下javascript中的自动执行函数(立即调用函数)的一些方法,正文如下  在Javascript中,任何function在执行的时候都会创建一个执行上下文,因为function声明变量和function有可能只在该function内部,这个... 查看详情

javascript闭包和立即执行函数的作用

一、闭包——closure  先看一个闭包的例子。我们想实现一个计数器,最简单的方法就是定义一个全局变量,计数的时候将其加1。但是全局变量有风险,哪里都有可能不小心改掉它。那局部变量呢,它只在函数内部有效,函数... 查看详情

存储为字符串变量时如何执行spark sql多行查询?

】存储为字符串变量时如何执行sparksql多行查询?【英文标题】:Howtoexecutesparksqlmultilinequerywhenstoredasastringvariable?【发布时间】:2018-05-2221:41:11【问题描述】:我有这样的多行查询代码valhiveInsertIntoTable=spark.read.text(fileQuery).collect()... 查看详情

如何使用“立即执行”为变量赋值?

】如何使用“立即执行”为变量赋值?【英文标题】:Howtouse`executeimmediate`toassignavaluetoavariable?【发布时间】:2016-02-1112:19:45【问题描述】:我正在尝试使用executeimmediate作为分配变量值的特殊要求。我正在使用以下代码并得到如... 查看详情

静态变量

    存储方式  静态存储方式:所谓静态存储方式是指在程序运行器件分配固定的存储空间的方式。静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。全局变量即属于此类存储方... 查看详情

javascript中的立即执行函数(function(){…})()

javascript中的立即执行函数(function(){…})() 深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包住业务代码,使用jquery时比较常见。(function(){…})()和(function(){…}(... 查看详情

在 HANA 中使用 Into 子句“立即执行”

...需要读取一个表(表名作为SP的输入参数提供),将结果存储在一个临时表中,然后将读取表的计数存储到一个变量中。请告知如何实现这一点。我已经能够使用动态查询读取表及其计数,但无法将结果放入临时表/变量中。“Sel... 查看详情

javascript——闭包

<script>  /*闭包概念:    当一个内部函数被调用,就会形成闭包,闭包就是能够读取其他函数内部变量的函数,    定义在一个函数内部的函,创建一个闭包环境,让返回的这个子程序抓住i,以便在后续执行时... 查看详情

javascript立即执行函数学习

1.新建对象,方法内变量作用域理解错误varmd1={count:0,add:function(){count++;},sub:function(){count--;},show:function(){console.log(count);}};md1.add();md1.add();md1.show();在不加this的情况之下,会试图与当前对象的作用域内寻找count。如果硬要这样写,就... 查看详情

javascript函数

  函数跟随一对圆括号()表示函数调用//函数声明语句写法functiontest(){};test();//函数表达式写法vartest=function(){};test();  但有时需要在定义函数之后,立即调用该函数。这种函数就叫做立即执行函数,全称为立即调用的函数表... 查看详情

javascript学习-46.立即执行函数(代码片段)

前言立即执行函数有以下作用创建一个独立作用域,这个作用域里面的变量,外部访问不到,避免变量污染。闭包和私有数据使用语法有两种写法//第一种:用括号把整个函数定义和括号调用包裹起来(function()//函... 查看详情

栈和堆

栈:存储值类型(有时候翻译成“堆栈”)无ARC(自动引用计数)负担,由系统自动管理,以执行函数为单位(一个函数一个栈)空间大小编译时决定(根据参数和局部变量可以确定)函数执行时,系统自动分配一个栈函数执行... 查看详情

WebEngineView - 立即运行JavaScript(在执行页面脚本之前)

】WebEngineView-立即运行JavaScript(在执行页面脚本之前)【英文标题】:WebEngineView-runJavaScriptimmediately(beforepagescriptsareexecuted)【发布时间】:2021-03-0511:12:36【问题描述】:我有一个使用WebEngineView的QtQuick浏览器。我想在加载普通脚... 查看详情

深入理解javascript中的立即执行函数(function(){…})()

这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是用(function(){…})()包住业务代码,使用jquery时比较常见,需要的朋友可以参考下http://www.jb51.net/article/50967.htm javascript和其他... 查看详情

javascript语句标识符,变量周期

语句描述break用于跳出循环。catch语句块,在try语句块执行出错时执行catch语句块。continue跳过循环中的一个迭代。do...while执行一个语句块,在条件语句为true时继续执行该语句块。for在条件语句为true时,可以将代码块执行指定的... 查看详情

javascript要点(上)

立即执行函数即ImmediatelyInvokedFunctionExpression(IIFE),正如它的名字,就是创建函数的同时立即执行。它没有绑定任何事件,也无需等待任何异步操作:(function(){console.log("js")})()function(){…}是一个匿名函数,包围它的一对括号将其转... 查看详情