জাভাস্ক্রিপ্ট "আনকড টাইপ এরিয়ার: অবজেক্ট কোনও ফাংশন নয়" সাহসীত্বের প্রশ্ন


95

কোডটি নিম্নরূপ:

<body>
    <a href="javascript:;" id="test">hello</a>
</body>

<script type="text/javascript">
    document.getElementById("test").addEventListener("click", function () {
      test()
    }, false)
    function test() {
      var postTypes = new Array('hello', 'there')   
      (function() { alert('hello there') })()
    }
</script>

এটি একটি নিক্ষেপ করবে:

"আনকাচড টাইপ এরিয়ার: অবজেক্ট ফাংশন নয়"

যদি আমি বেনামে ফাংশন কল / অনুরোধকে অন্য বন্ধনীগুলির সেটগুলিতে আবদ্ধ করি তবে এটি সতর্কতা কার্যকর করবে, তবে তবুও আমাকে একটি ত্রুটি দেবে। যদি আমি "var পোস্টটাইপস" সংজ্ঞার পরে একটি আধা-কোলন রাখি তবে এটি পুরোপুরি ঠিক হয়ে যাবে।

আমাকে বিশ্বাস করার জন্য পরিচালিত হয়েছিল যে জাভাস্ক্রিপ্টে আধা-কলোনগুলির প্রয়োজন হয় না, তাই আমি অনুমান করছি যে ফাংশন অ্যাপ্লিকেশনের কিছু অদ্ভুত মিশ্রতা ব্যবস্থা রয়েছে যা আমি পুরোপুরি বুঝতে পারি না। আমি কেন এই ত্রুটি পাচ্ছি?


দেখে মনে হচ্ছে আপনি অনামী ফাংশন এবং স্থির ফাংশন উভয়ই তৈরি করার চেষ্টা করছেন এবং এটি হিসাবে এটি কার্যকর হবে বলে আশা করছেন। আপনি যদি ফাংশন () সরিয়ে ফেলেন তবে কী হবে
brumScouse

উত্তর:


88

জাভাস্ক্রিপ্ট সেমিকোলন প্রয়োজন নেই, এটা ঠিক যে ব্যাখ্যাকারী লাইন ব্রেক এ আপনাকে তাদের ঢোকাব যেখানে সম্ভব *

দুর্ভাগ্যক্রমে, কোড

var a = new B(args)(stuff)()

সিনট্যাক্স ত্রুটির ফলে হয় না , তাই কোনও ;.োকানো হবে না। (যা চালাতে পারে একটি উদাহরণ

var answer = new Function("x", "return x")(function(){return 42;})();

এরকম বিস্ময় এড়াতে সর্বদা এর বিবৃতি শেষ করতে নিজেকে প্রশিক্ষণ দিন ;


* এটি শুধুমাত্র থাম্বের নিয়ম এবং সর্বদা সত্য নয়। সন্নিবেশনের নিয়মটি আরও জটিল। সেমিকোলন সন্নিবেশ সম্পর্কে এই ব্লগ পৃষ্ঠায় আরও বিশদ রয়েছে।


13
বা: এরকম চমক এড়াতে, নিজেকে পরিষ্কার পাঠযোগ্য কোড লিখতে প্রশিক্ষণ দিন (যা সর্বদা প্রযোজ্য হওয়া উচিত) এবং সাধারণ এএসআই বিধিগুলি জানুন ... জেএসের কার্যনির্বাহীতা কীভাবে বন্ধ হয় তা "জানা" এর চেয়ে সত্যই আলাদা নয়।

18

আপনার কোড এমন কোনও ক্ষেত্রে অভিজ্ঞতা অর্জন করে যেখানে স্বয়ংক্রিয় সেমিকোলন সন্নিবেশ (এএসআই) প্রক্রিয়াটি ঘটে না।

আপনার কখনই এএসআই এর উপর নির্ভর করা উচিত নয়। সঠিকভাবে বিবৃতি পৃথক করতে আপনার সেমিকোলন ব্যবহার করা উচিত:

var postTypes = new Array('hello', 'there'); // <--- Place a semicolon here!!

(function() { alert('hello there') })();

আপনার কোডটি আসলে অ্যারে অবজেক্টটি চালানোর চেষ্টা করছিল।


সমস্যা সমাধানের একটি উপায়, তবে আমি ক্রকফোর্ড-ক্লাবের পিছনে যেতে পারি না।

4
@pst: আমি Crock's-ক্লাবে নই আমাকে ভিন্নরূপে বা অন্য কথায় যাক, এ সব :)
খ্রিস্টান সি Salvadó

সেক্ষেত্রে আমি কঠোর কথার জন্য ক্ষমা চাইছি :(

আমি কুইজ উপভোগ করেছি। এএসআই প্রকৃতপক্ষে আইকি-কোডের সাথে মারাত্মকভাবে বিভ্রান্ত করছে!

8

আমি একটি অনুরূপ ত্রুটি পেয়েছি এবং এটি বুঝতে আমার কিছুটা সময় লেগেছে যে আমার ক্ষেত্রে আমি অ্যারে ভেরিয়েবল পেইনভয়েস এবং ফাংশনটিও পেইনভয়েসগুলির নাম দিয়েছি। এটি AngularJs গুলিয়ে ফেলেছে। একবার আমি নামটি প্রসেসপেমেন্টস () এ পরিবর্তিত করে শেষ পর্যন্ত এটি কাজ করে। এই ত্রুটিটি এবং সমাধানটি কেবল ভাগ করে নিতে চেয়েছিলাম কারণ এটি বের করতে আমার অনেক সময় লেগেছে।


এখানেও, আমার একটি পরিবর্তনশীল নাম alertছিল এবং জাভাস্ক্রিপ্ট সতর্কতা ফাংশনটি কল করার চেষ্টা করছিলাম এবং এটি বলবে 'সতর্কতা কোনও ফাংশন নয়'। এটি alertআসল ফাংশনের পরিবর্তে ভেরিয়েবলকে কল করার চেষ্টা করছিল
জেমস 111

0

আপনার জাভাস্ক্রিপ্ট ফাইলে ফাংশন কল করার আগে ফাংশন বডি রাখার চেষ্টা করুন।


0

আমি এই একই ত্রুটি পেয়েছিলাম এবং সমাধান অনুসন্ধানের জন্য দেড় দিন ব্যয় করেছি। নয়মীর উত্তর আমাকে প্রয়োজনীয় সমাধানে নিয়ে যায়।

আমার ইনপুট (টাইপ = বোতাম) এর একটি বৈশিষ্ট্য nameছিল যা কোনও ফাংশন নামের অনুরূপ ছিল যা অনক্লিক ইভেন্ট দ্বারা ডাকা হত। একবার আমি বৈশিষ্ট্য পরিবর্তন করেছি nameসবকিছু কাজ করে।

<input type="button" name="clearEmployer" onClick="clearEmployer();">

পরিবর্তন:

<input type="button" name="clearEmployerBtn" onClick="clearEmployer();">

0

ওয়েবপ্যাক দিয়ে টিএস সংকলন এবং বান্ডিল করার সময় আমার এই ত্রুটি রয়েছে। এটি সংকলন export class AppRouterElement extends connect(store, LitElement){....}করে let Sr = class extends (Object(wr.connect) (fn, vr)) {....}যা কমা হারিয়ে যাওয়ার কারণে ভুল বলে মনে হয়। রোলআপের সাথে বান্ডিল করার সময় কোনও ত্রুটি নেই।

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