কেন কোনও জাভাস্ক্রিপ্ট কোড "বাঁধাই কেটে" রাখতে চায়?


10

ব্যবহারের কারণ a

(0, foo.fn)();

হয় বাঁধাই কাটা : thisআবদ্ধ আর করা হবে না fooকিন্তু বিশ্বব্যাপী বস্তু আবদ্ধ করা হবে না।

তবে যে কোনও জাভাস্ক্রিপ্ট কোড (বা গুগলের জেএস কোড) বাইন্ডিংটি কাটতে চাইবে তার কারণ কী? (এবং এটি কি একটি বিরোধী ধরণ কিনা?)


এটিকে বাধ্যতামূলক বলা ঠিক মনে হয় না। bindপদ্ধতি বাঁধাই এখানে এটি কেবল একটি প্রসঙ্গে পরিবর্তন। আপনি বাঁধাই কাটা বা হারাতে পারবেন না (এর দ্বারা নির্মিত বন্ড bind)।
মার্জিলিন

সম্ভবত এই কোডটি কোনও কার্যকরী ভাষা (ক্লোজারস্রিপ্ট?) থেকে ট্রান্সপ্লেরার দ্বারা উত্পাদিত হয়েছে যা কলিং ফাংশনগুলির ক্ষেত্রে নির্দিষ্ট প্রয়োজনীয়তা রয়েছে?
মার্জেলিন

সম্ভাব্য নকল কেন বাবেল আমদানি করা ফাংশন (0, fn) (…) এ পুনরায় লিখন করে? - বা অন্য কোথায় আপনি এটি দেখতে পাচ্ছেন?
বার্গি

আমার মনে হয় আমি এটি গুগলের কোডে এবং সম্ভবত কিছু কৌতুক, প্রতিক্রিয়া বা অন্য কোনও কাঠামোর মধ্যে দেখেছি ... কোথায় এবং কখনও কখনও এটি
খাটো করা

উত্তর:


8

আধুনিক জাভাস্ক্রিপ্ট রূপান্তর করতে - যা স্পেসিফিকেশনে সর্বাধিক সংযোজনগুলি ব্যবহার করে - একটি জাভাস্ক্রিপ্ট সংস্করণে আরও ব্যাপকভাবে সমর্থিত এই ধরণের কোড সাধারণত ট্রান্সপোর্টারদের (বাবেলের মতো) দ্বারা উত্পন্ন হয়।

এখানে এই উদাহরণস্বরূপ যেখানে এই প্রতিস্থাপনের ধরণটি ঘটে:

ধরা যাক, প্রতিস্থাপনের আগে আমাদের কাছে এই মূল কোডটি রয়েছে:

import {myfunc} from "mymodule";
myfunc();

এই ES5- সামঞ্জস্যপূর্ণ কোড করতে, আপনি এটি করতে পারেন:

"use strict";    
var mymodule = require("mymodule");    
mymodule.myfunc();

কিন্তু এখানে আমরা চালানো হবে myfuncসঙ্গে mymoduleযেমন thisমান, যা মূল কোডে ঘটছে না করা হয়। এবং যদিও যে শক্তি সবসময় কোনো সমস্যা হবে, এটা ফাংশন আচরণ করবে নিশ্চিত করতে উত্তম শুধু এটা মূল সংস্করণে would মত এমনকি যদি যে ফাংশন একটি ব্যবহার করেন, thisকিভাবে অস্বাভাবিক বা এমনকি অকাজের ব্যবহার করে - রেফারেন্স thisমধ্যে myfunc(হতে পারে কারণ মূল সংস্করণে এটিও হবে undefined)।

উদাহরণস্বরূপ, যদি this.memberFun()ফাংশনটিতে কোনও রেফারেন্সের কারণে মূল কোডটি একটি ত্রুটি ছুঁড়ে মারে, তবে এটি পরিবহিত সংস্করণেও ফেলে দেবে।

সুতরাং এটি হ'ল কমা অপারেটরটি সেই পার্থক্য থেকে মুক্তি পেতে ব্যবহৃত হয়:

(0, mymodule.myfunc)();

এটা ঠিক যে, কোডে যে আপনি নিজেকে লিখুন, আপনি একটি ভাল ব্যবহারের ক্ষেত্রে এই প্যাটার্ন জন্য আছে না হবে, যেমন আপনি ব্যবহার না thisমধ্যে myfuncপ্রথম স্থানে।


কীভাবে requireES6 বা ES5 এর সাথে সম্পর্কিত? আমি মনে করতাম যে প্রয়োজনটি নোড মডিউল।
কনসেক্স

requireপ্রকৃতপক্ষে নোডে উপলভ্য একটি ফাংশন বা ব্রাউজারিফাই, প্রয়োজনীয়.js, ... ইত্যাদি লাইব্রেরিতে সরবরাহ করা হয়। এটি ES5 / 6 এর সাথে বিশেষভাবে সম্পর্কিত নয়। অন্যদিকে, কোনও ES6 + ভাষা নির্মাণ যেমন প্রতিস্থাপনের মতো importকিছু না করে ES5 এ ব্যাকপোর্ট করা যায় না।
ট্রিনকোট

সুতরাং যদি এটি সারাংশের কয়েকটি লাইনে ঘনীভূত হয়: যদি এটি একটি লাইব্রেরি বা মডিউল হয় যাতে অনেকগুলি ফাংশন অন্তর্ভুক্ত থাকে যা সত্যিকারের পদ্ধতি বা ওও নয় (আকারে modA.fn1) হয় তবে এই ফাংশনগুলি সত্যই ব্যবহার করা উচিত নয় thisতবে যদি দুর্ঘটনাক্রমে তারা করে, আমরা thisপার্শ্ব প্রতিক্রিয়া হিসাবে
কোনওভাবেই মডিউলটিকে

হ্যাঁ, আপনি অবশ্যই এটি সংক্ষিপ্ত করতে পারেন। আবার, এটি বেশিরভাগ কোডারের বেশি নয়, ট্রান্সপোর্টারদের জন্য উদ্বেগের বিষয়।
ট্রিনকোট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.