”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript执行上下文详解

JavaScript执行上下文详解

发布于2024-11-04
浏览:333

JavaScript Execution Context একটি গুরুত্বপূর্ণ ধারণা যা প্রোগ্রাম চলাকালীন সময়ে কিভাবে কোড ব্যাখ্যা এবং এক্সিকিউট করা হয় তা বোঝায়। প্রতিটি ফাংশন কল বা কোডের একটি ব্লক চালানোর সময় একটি execution context তৈরি হয়, যা কোড চলাকালীন সময়ে সমস্ত ভেরিয়েবল, অবজেক্ট, এবং ফাংশনগুলোর স্কোপকে নিয়ন্ত্রণ করে।

Execution Context কী?

Execution Context হল একটি পরিবেশ যা JavaScript কোডের execution (কার্যকরকরণ) সময় তৈরি হয়। এটি একটি container এর মতো কাজ করে যা specific ফাংশনের ভেরিয়েবল, অবজেক্ট এবং ফাংশনের তথ্যগুলো সংরক্ষণ করে। মূলত, Execution Context জাভাস্ক্রিপ্ট ইঞ্জিনকে বলে দেয় কোন ভেরিয়েবল এবং ফাংশনগুলো কোথায় পাওয়া যাবে এবং সেগুলো কীভাবে কার্যকর করতে হবে।

Execution Context এর প্রকারভেদ

Execution Context প্রধানত তিন প্রকারের হতে পারে:

  1. Global Execution Context (GEC): যখন কোনো স্ক্রিপ্ট প্রথমবার চালু হয়, তখন একটি global execution context তৈরি হয়। এটি শুধুমাত্র একবার তৈরি হয় এবং এতে global object (যেমন ব্রাউজারে window) এবং this binding অন্তর্ভুক্ত থাকে। GEC শেষ হয় না যতক্ষণ না পুরো স্ক্রিপ্ট execute শেষ হয়।
  2. Function Execution Context (FEC): প্রতিবার যখন একটি ফাংশন কল করা হয়, তখন একটি নতুন execution context তৈরি হয়। প্রতিটি ফাংশনের নিজস্ব execution context থাকে, যা তাদের নিজস্ব scope, variables এবং this binding নিয়ে থাকে।
  3. Eval Execution Context: যখন eval() ফাংশনটি ব্যবহৃত হয় তখন একটি নতুন execution context তৈরি হয়। যদিও eval() ব্যবহার করা সাধারণত নিরুৎসাহিত করা হয় কারণ এটি কোড পড়ার এবং নিরাপত্তার জন্য সমস্যা সৃষ্টি করতে পারে।

Execution Context এর Components:

Execution Context সাধারণত তিনটি প্রধান অংশ নিয়ে গঠিত:

  1. Variable Object (VO) / Lexical Environment: সমস্ত ভেরিয়েবল, ফাংশন ডিক্লারেশন এবং ফাংশন আর্গুমেন্টগুলোকে সংরক্ষণ করে।
console.log(a); // Output: undefined
var a = 5;

function myFunction() {
    console.log(b); // Output: undefined
    var b = 10;
}
myFunction();
  1. Scope Chain: Scope Chain হলো একটি চেইন যা বর্তমান execution context থেকে শুরু করে তার পূর্ববর্তী context পর্যন্ত সমস্ত ভেরিয়েবল এবং ফাংশনগুলিকে অ্যাক্সেসযোগ্য করে। এটি নির্ধারণ করে কোন ভেরিয়েবলগুলি কোথায় পাওয়া যাবে।।
var globalVar = "I'm Global";

function outerFunction() {
    var outerVar = "I'm in outer function";

    function innerFunction() {
        var innerVar = "I'm in inner function";
        console.log(globalVar); // "I'm Global"
        console.log(outerVar);  // "I'm in outer function"
    }

    innerFunction();
}

outerFunction();

  1. this Keyword Binding: this হল একটি বিশেষ keyword, যা Execution Context অনুযায়ী পরিবর্তিত হয়। Global Execution Context এ this global অবজেক্টকে নির্দেশ করে, আর Function Execution Context এ এটি নির্ভর করে ফাংশনটি কীভাবে কল করা হয়েছে তার উপর।
console.log(this); // Global context, refers to `window` in browsers.

var myObject = {
    name: "JavaScript",
    sayName: function() {
        console.log(this.name); // `this` refers to `myObject`.
    }
};

myObject.sayName(); // Output: "JavaScript"

function MyConstructor() {
    this.prop = "Property";
}

var obj = new MyConstructor();
console.log(obj.prop); // Output: "Property"

Execution Context Lifecycle:

Execution Context এর lifecycle তিনটি ধাপে বিভক্ত:

  1. Creation Phase: এই ধাপে Execution Context তৈরি হয় এবং Scope Chain, Variable Object এবং this এর মতো সমস্ত গুরুত্বপূর্ণ components তৈরি এবং initialized হয়।
  2. Execution Phase: এই ধাপে কোড execute করা হয়, অর্থাৎ, ভেরিয়েবলগুলোকে মান অ্যাসাইন করা হয় এবং ফাংশনগুলো execute করা হয়।
  3. Garbage Collection: Execution Context এর শেষের দিকে, যদি এটি আর দরকার না হয়, তাহলে এটি মেমরি থেকে অপসারণ করা হয় এবং সংশ্লিষ্ট resources গুলো মুক্তি পায়।

JavaScript Execution Context সম্পর্কে বিস্তারিত আলোচনা

Conclusion

Execution Context জাভাস্ক্রিপ্টের মূল ভিত্তি যা ঠিক করে কোড কীভাবে কার্যকর হবে। এটি ভেরিয়েবল, ফাংশন, এবং স্কোপের সঠিক ব্যবস্থাপনা করে। Execution Context এর সঠিক বোঝাপড়া থাকলে, জাভাস্ক্রিপ্ট কোডের কার্যকারিতা এবং কার্যনির্বাহী ধাপগুলোকে ভালোভাবে বুঝতে এবং পরিচালনা করতে সহায়তা করে।

版本声明 本文转载于:https://dev.to/rsmacademybd/javascript-execution-context-smprke-bistaarit-aalocnaa-1756?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    在两个条件下插入或更新或更新 solution:的答案在于mysql的插入中...在重复键更新语法上。如果不存在匹配行或更新现有行,则此功能强大的功能可以通过插入新行来进行有效的数据操作。如果违反了唯一的密钥约束。实现所需的行为,该表必须具有唯一的键定义(在这种情况下为'名称'...
    编程 发布于2025-06-09
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-06-09
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-06-09
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-06-09
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击单击单个鼠标单击单击单击?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(document.Selection){...
    编程 发布于2025-06-09
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-06-09
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-06-09
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-06-09
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-06-09
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-06-09
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-06-09
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-06-09
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-06-09
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-06-09
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-06-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3