জেএসলিন্ট হঠাৎ রিপোর্ট করছে: "ব্যবহার কঠোরভাবে" ফাংশন ফর্মটি ব্যবহার করুন


930

আমি বিবৃতি অন্তর্ভুক্ত:

"use strict";

আমার জাভাস্ক্রিপ্ট ফাইলগুলির বেশিরভাগের শুরুতে।

জেএসলিন্ট এর আগে এর আগে কখনও সতর্ক করেনি। তবে এখন এটি হচ্ছে:

"ব্যবহার কঠোর" এর ফাংশন ফর্মটি ব্যবহার করুন।

কেউ কি জানেন যে "ফাংশন ফর্ম" কী হবে?

উত্তর:


1010

'use strict';মোড়ানো কার্যক্রমে প্রথম বিবৃতি হিসাবে অন্তর্ভুক্ত করুন , সুতরাং এটি কেবল সেই ফাংশনকেই প্রভাবিত করে। কঠোর নয় এমন স্ক্রিপ্টগুলি সংযুক্ত করার সময় এটি সমস্যাগুলি প্রতিরোধ করে।

দেখুন ডগলাস Crockford এর সর্বশেষ ব্লগ পোস্ট কঠোর মোডে শহরে আসছে

পোস্ট থেকে উদাহরণ:

(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());

আপডেট: আপনি যদি তাত্ক্ষণিক ফাংশনটি মোড়তে না চান (যেমন এটি নোড মডিউল) তবে আপনি সতর্কতাটি অক্ষম করতে পারবেন।

জন্য JSLint (প্রতি Zhami ):

/*jslint node: true */

জন্য JSHint :

/*jshint strict:false */

বা (প্রতি লেইট শেডে )

/* jshint -W097 */

JSHint থেকে কোন অবাধ সাবধানবাণী অক্ষম করতে, মানচিত্রের পরীক্ষা JSHint সোর্স কোড (ইন বিশদ ডক্স )।

আপডেট 2: জেএসহিন্টnode:boolean বিকল্পটি সমর্থন করে । দেখুন .jshintrcGitHub এ

/* jshint node: true */

1
ভিজ্যুয়াল স্টুডিওর জন্য জেএসলিন্টে এটি বিকল্প: "গ্লোবাল
ইএস 5 কে

10
যদিও নোড অ্যাপ্লিকেশনগুলির জন্য এটি অর্থবোধ করে না। -1
বেভাকাকোয়া

1
হাই নিকো, আমি উত্তরটি আপডেট করেছি, নোডের জন্য আপনি টাইপ করতে পারেন: / * jshint -W097 * / এই সতর্কতাটি নিষ্ক্রিয় করতে
লাইথ শেদেদ

@ ল্যাথশ্যাডিড একটি বিকল্প হ'ল /*jshint strict:false */আপনি কী করছেন তা পরিষ্কার করে দেওয়া (যদি না আপনার
সংখ্যাটির

2
@ নুমনন এটি সত্যই বয়লারপ্লেট নয়, এটি আপনার নির্দেশের পরিবেশের পরিবর্তনের জন্য একটি নির্দেশিকা। এটি বলেছে যে নতুন ES6 সিনট্যাক্স (মডিউল এবং ক্লাস) ডিফল্টরূপে কঠোর (দেখুন বাস্তু-ইন্টারন্যাশনাল.org /ecma-262/6.0/ # সেকেন্ড-কড়া-মোড-কোড ), সুতরাং এগিয়ে যাওয়ার জন্য এটি সর্বত্র ছড়িয়ে পড়ার দরকার হবে না। এর মধ্যে, আপনি কেবলমাত্র প্রতি ফাইলের জন্য একবার নির্দিষ্ট করতে আপনাকে একটি আইআইএফইতে আপনার সমস্ত কোডটি মোড়ানো করতে পারেন "use strict";
বিডুকস

217

আপনি যদি নোডজেএসের জন্য মডিউলগুলি লিখছেন তবে সেগুলি ইতিমধ্যে এনপ্যাপুলেটেড। জেএসলিন্টকে বলুন যে আপনি নিজের ফাইলের শীর্ষে অন্তর্ভুক্ত করে নোড পেয়েছেন:

/*jslint node: true */

2
এফওয়াইআই, এই বিকল্পটি জেএসলিন্টের পক্ষে কাজ করে, তবে জেএসহিন্ট এই নির্দেশের সাথে কঠোরতার সতর্কতা বন্ধ করে না। /*jshint strict:false */
জেএসহিন্টের

4
আমার কাছে জেএসহিন্ট v2.9.2 দিয়ে লেখা। "node": true.Jshintrc- এ যুক্ত হয়েছে
RyanM

71

আমি এর পরিবর্তে jshint ব্যবহার করার পরামর্শ দেব ।

এটি এর মাধ্যমে এই সতর্কতা দমন করতে দেয় /*jshint globalstrict: true*/

আপনি যদি কোনও লাইব্রেরি লিখছেন তবে আমি কেবলমাত্র বিশ্বব্যাপী কঠোর ব্যবহারের পরামর্শ দিচ্ছি যদি আপনার কোডটি মডিউলগুলিতে নোডেজের মতো হয়।

অন্যথায় আপনি যারা আপনার গ্রন্থাগারটি ব্যবহার করছেন তাদের কঠোর মোডে বাধ্য করবেন।



4
এফওয়াইআই: জেএসহিন্টে বিশ্বব্যাপী বিকল্পটি পরিবর্তিত হয়েছে। strict: 'global'এখনই চেষ্টা করুন , এবং jshint.com/docs/options/#globalstrict দেখুন
হোভিস বিডল

17

আমি ক্রস প্ল্যাটফর্ম জাভাস্ক্রিপ্ট ব্লগ পোস্ট অনুসরণ করে একটি নোড.জেএস / ব্রাউজারফাই অ্যাপ্লিকেশন তৈরি করা শুরু করেছি । এবং আমি এই ইস্যুতে দৌড়েছি, কারণ আমার একেবারে নতুন গ্রান্টফিল জ্যাশিন্টটি পাস করেনি।

ভাগ্যক্রমে গ্রান্টের উপর লিনপব বইটিতে একটি উত্তর পেয়েছি :

যদি আমরা এটি এখনই ব্যবহার করে দেখি তবে আমরা আমাদের গ্রান্টফাইলে স্ক্যান করব ... এবং কিছু ত্রুটি পেয়ে যাব:

$ grunt jshint

Running "jshint:all" (jshint) task
Linting Gruntfile.js...ERROR
[L1:C1] W097: Use the function form of "use strict".
'use strict';
Linting Gruntfile.js...ERROR
[L3:C1] W117: 'module' is not defined.
module.exports = function (grunt) {

Warning: Task "jshint:all" failed. Use --force to continue.

উভয় ত্রুটি আছে কারণ Gruntfile একটি নোড প্রোগ্রাম, এবং ডিফল্ট ভাবে JSHint চিনতে বা ব্যবহারের অনুমতি দেয় না moduleএবং স্ট্রিং সংস্করণ use strict। আমরা একটি JSHint বিধি সেট করতে পারি যা আমাদের নোড প্রোগ্রামগুলি গ্রহণ করবে। আসুন আমাদের jshint টাস্ক কনফিগারেশন সম্পাদনা করুন এবং একটি বিকল্প কী যুক্ত করুন:

jshint: {
  options: {
    node: true
  },
}

যোগ করার পদ্ধতি node: truejshint করতে optionsআমার জন্য "নোড মোড" মধ্যে jshint করা, উভয় ত্রুটি সরানো হয়েছে।


16

নিম্নলিখিত প্রকল্পের সাথে আপনার প্রকল্পের মূলে একটি ফাইল .jslintrc (অথবা jshint এর ক্ষেত্রে .jshintrc) যুক্ত করুন:

{
    "node": true
}

15

স্ট্রিং ফর্মের সাথে সহজাত ভুল কিছু নেই।

অ-কঠোর জাভাস্ক্রিপ্টকে গাaten় করার চিন্তার জন্য "গ্লোবাল" কঠোর ফর্মটি এড়িয়ে চলার পরিবর্তে, কেবল অ-কড়া জাভাস্ক্রিপ্টকে কঠোর হতে কেবল ঠিক করা আরও ভাল।


0

আমি মনে করি সবাই এই প্রশ্নের "হঠাৎ" অংশটি মিস করেছেন। সম্ভবত, আপনার .jshintrc এর সিন্ট্যাক্স ত্রুটি রয়েছে, সুতরাং এটি 'ব্রাউজার' লাইনটি অন্তর্ভুক্ত করে না। ত্রুটিটি কোথায় তা দেখার জন্য এটি একটি জসন যাচাইকারীর মাধ্যমে চালান।


1
না, হঠাৎ এটি ঘটেছিল কারণ প্রশ্নটি যখন জিজ্ঞাসা করা হয়েছিল তখন অনলাইন জেএসলিন্ট পরিষেবাটি সেই বৈশিষ্ট্যটি যুক্ত করেছে।
কুইন্টিন

0
process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

আপনার ফাইলের শুরুতে এই লাইনগুলি যুক্ত করুন


-4

এটি কতটা সহজ এটি: আপনি যদি আপনার সমস্ত কোডের সাথে কঠোর হতে চান তবে "use strict";আপনার জাভাস্ক্রিপ্টের শুরুতে যুক্ত করুন ।

তবে যদি আপনি কেবল আপনার কিছু কোডের সাথে কঠোর হতে চান তবে ফাংশন ফর্মটি ব্যবহার করুন। যাইহোক, আমি আপনাকে আপনার জাভাস্ক্রিপ্টের শুরুতে এটি ব্যবহার করার জন্য পুনঃসংশোধন করব কারণ এটি আপনাকে আরও ভাল কোডার হতে সহায়তা করবে।


8
আমি যখন কেবল "use strict";আমার জেএস ফাইলের শীর্ষে রাখি তখন আমি আসলে এই ত্রুটিটি পাই , তাই এটি সম্পূর্ণ সত্য নাও হতে পারে।
মোয়েসেফ

@ ময়েসফ এর কারণ আপনার কোডটিতে ত্রুটি রয়েছে। আপনার কোডিং দক্ষতা আরও ভাল করার জন্য এবং আপনার কোডকে "" আলগা "কম করার জন্য এটি ঠিক আছে ... এটি অঘোষিত ভেরিয়েবলগুলি গ্রহণ করবে না ...
জেসন স্ট্যাকহাউস

11
@ জেসনস্ট্যাকহাউস: সত্য নয়। জেএসলিন্ট "গ্লোবাল" ফর্মটি গ্রহণ করবে না "use strict";, যেখানে এটি কেবল আপনার কোডের শীর্ষে রাখা হয়েছে। এটি কেবলমাত্র "use strict;"কোনও ক্রিয়াকলাপে আবদ্ধ থাকা অবস্থায় অনুমতি দেয় । (জেএস_হিন্ট_ আপনাকে বৈশ্বিক ফর্মটি ব্যবহার করতে দেয়, যদিও - প্রয়োজনীয় সেটিংসের জন্য উপরের উত্তরটি দেখুন)।
পিটারফ্লিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.