Hướng dẫn can i store a function in a variable javascript? - tôi có thể lưu trữ một hàm trong một biến javascript không?

59

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang học JavaScript vào lúc này và tôi không hiểu khi nào nên viết một hàm vào một biến.

Chẳng hạn, cả hai khối mã sau đây đều thực hiện chính xác điều tương tự trong Node.js:

 var onReq = function[req, res] {
   res.write['Hello'];
 };

 http.createServer[onReq].listen[3000];

function onReq[req, res] {
   res.write['Hello'];
 }

 http.createServer[onReq].listen[3000];

Đó là phương pháp tốt nhất để làm theo thực tiễn tốt nhất, và tại sao?

Đã hỏi ngày 8 tháng 3 năm 2012 lúc 13:36Mar 8, 2012 at 13:36

4

Thông thường tôi sẽ chỉ sử dụng var funcName = function[]{} khi tôi cần xác định lại [các] hành động cho chức năng đó sau này. Ví dụ:

var foo = function[a]{ return a * 2; }
var bar = foo[2];

foo = function[a]{ return a / 2; }

bar = foo[bar];

Mặt khác, đối với hầu hết các mục đích [giả sử đó không phải là một cuộc gọi lại hoặc công cụ sửa đổi] khai báo một hàm "kinh điển" thường được chấp nhận.

Đã trả lời ngày 8 tháng 3 năm 2012 lúc 13:43Mar 8, 2012 at 13:43

Brad Christiebrad ChristieBrad Christie

99K16 Huy hiệu vàng149 Huy hiệu bạc198 Huy hiệu đồng16 gold badges149 silver badges198 bronze badges

5

Tôi mặc định là phiên bản function onReq[]{} không biến đổi. Đó không phải là một quyết định đồng tình mà tôi đã đưa ra, nhưng nghĩ về nó đưa ra những lập luận này:

  • Nó trông sạch hơn.
  • Nó đơn giản hơn về mặt khái niệm: nó chỉ là một hàm, trong khi loại kia là một hàm và một biến. Đó là một điều nhỏ, nhưng tôi thấy nó có giá trị không kém.
  • Nó đảm bảo cho tôi rằng onReq sẽ luôn đề cập đến cơ thể chức năng đó - một điều ít hơn để xem xét khi đọc mã. Sắp xếp giống như đánh dấu một biến là final trong java.
  • Giữ tôi khỏi "vô tình" thay thế chức năng, gây ra các tác dụng phụ ngoài ý muốn ở nơi khác.

Đã trả lời ngày 8 tháng 3 năm 2012 lúc 13:56Mar 8, 2012 at 13:56

SuprsuprSupr

Huy hiệu vàng 18K33 gold badges29 silver badges35 bronze badges

Đây là một giải thích:

Có một sự khác biệt giữa tên hàm và biến mà hàm được gán cho:

  • Tên hàm không thể được thay đổi, trong khi biến hàm được gán cho có thể được chỉ định lại.
  • Tên chức năng chỉ có thể được sử dụng trong cơ thể của chức năng. Cố gắng sử dụng nó bên ngoài cơ thể của chức năng dẫn đến một lỗi [hoặc không xác định nếu tên hàm được khai báo trước đó thông qua câu lệnh VAR].

//developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope

Đã trả lời ngày 8 tháng 3 năm 2012 lúc 13:46Mar 8, 2012 at 13:46

ChurkchurkChurk

4.4465 Huy hiệu vàng21 Huy hiệu bạc37 Huy hiệu đồng5 gold badges21 silver badges37 bronze badges

3

Tôi thấy rằng không ai được đề cập [trực tiếp và thực tế - dường như câu hỏi này là về] lý do mà cá nhân tôi thấy hữu ích nhất để lưu trữ các chức năng trong các biến. Lý do đó là xử lý logic phức tạp đòi hỏi rất nhiều sự lựa chọn [ví dụ: ____ 9] để xác định quá trình hành động tiếp theo mà các chức năng khác nhau nên được gọi, có thể với các bộ đầu vào khác nhau. Nó làm cho mã sạch hơn khi quá trình hành động tiếp theo đó được đưa ra chỉ ở một nơi, ở cuối logic của chúng tôi.

function fooA [input] {...};
function fooB [input] {...};
let chosenHandler;
let chosenInput;

// Here we establish which function is relevant
if [someCondition] chosenHandler = fooA;
else chosenHandler = fooB;

// Here we establish which parameter should be used
if [someOtherCondition] chosenInput = 'First input';
else chosenInput = 'Second input';

// Call chosen function with chosen parameters - one place, nice and clean
chosenHandler[chosenInput];

Nếu chúng tôi cố gắng gọi các chức năng trực tiếp, mã sẽ trở nên lộn xộn hơn nhiều và khiến logic càng phức tạp hơn.

Đã trả lời ngày 18 tháng 9 năm 2019 lúc 17:15Sep 18, 2019 at 17:15

EggoneggonEggon

1.7542 huy hiệu vàng13 Huy hiệu bạc31 Huy hiệu đồng2 gold badges13 silver badges31 bronze badges

Theo JavaScript của John Resig như một bài viết ngôn ngữ đầu tiên, khối mã đầu tiên của bạn được coi là thông lệ tốt nhất.

Đã trả lời ngày 8 tháng 3 năm 2012 lúc 13:42Mar 8, 2012 at 13:42

1

Cá nhân tôi đã gặp phải một số vấn đề nhất định với việc gọi các chức năng cục bộ [các chức năng được khai báo bên trong các chức năng khác] khi sử dụng cú pháp không biến đổi trong một số phiên bản IE [rất có thể IE8 hoặc thấp hơn] trong khi cú pháp biến đổi hoạt động như mong đợi.

Cho rằng các chức năng không nên bị từ chối trong không gian tên toàn cầu, hầu hết các chức năng đều là cục bộ và do đó luôn có ý nghĩa khi sử dụng cú pháp thay đổi cho các chức năng luôn luôn.

Đã trả lời ngày 8 tháng 3 năm 2012 lúc 13:57Mar 8, 2012 at 13:57

Marat Tanalinmarat TanalinMarat Tanalin

Huy hiệu vàng 13.7K11 gold badge34 silver badges52 bronze badges

Tôi thấy một số ý kiến ​​khác nhau ở đây, nhưng hầu hết trong số họ dựa trên những gì bạn nghĩ là tốt hơn hay không, nhưng tôi không thấy lý do kỹ thuật khi nào nên sử dụng cái này hay khác, nhưng chắc chắn có những hạn chế hoặc lợi thế kỹ thuật trong Sử dụng công thức khai báo này hay công thức khác. Tôi thực sự là người mới bắt đầu với JavaScript và tôi không cảm thấy tự tin để tư vấn về nó, nhưng tôi sẽ đề xuất một trường hợp lưu trữ một chức năng trong một biến không hoạt động.

Trong mã bên dưới, xác định bộ lọc góc, nếu tôi xác định hàm bên trong một biến, thì tôi không thể gọi nó thành công từ phương thức bộ lọc. Bất cứ ai có thể giải thích cho tôi lý do kỹ thuật về điều này?

Xem mã [nhận xét không hoạt động]:

angular
    .module['loc8rApp']
    .filter['formatDistance', formatDistance];

function formatDistance[]{
        return function [distance] {
        var numDistance, unit;
        if [distance && _isNumeric[distance]] {
         if [distance > 1] {
            numDistance = parseFloat[distance].toFixed[1];
            unit = 'km';
          } else {
            numDistance = parseInt[distance * 1000,10];
            unit = 'm';
          }
          return numDistance + unit;
        } else {
          return "?";
        }
      };
};

var _isNumeric = function [n] {
  return !isNaN[parseFloat[n]] && isFinite[n];
};

/*
var formatDistance = function [] {
  return function [distance] {
    var numDistance, unit;
    if [distance && _isNumeric[distance]] {
      if [distance > 1] {
        numDistance = parseFloat[distance].toFixed[1];
        unit = 'km';
      } else {
        numDistance = parseInt[distance * 1000,10];
        unit = 'm';
      }
      return numDistance + unit;
    } else {
      return "?";
    }
  };
};
*/

Cảm ơn bạn trước!

Đã trả lời ngày 15 tháng 7 năm 2016 lúc 8:22Jul 15, 2016 at 8:22

Nguyên tửAtomicNation

Phim huy hiệu vàng 18111 gold badge2 silver badges6 bronze badges

Bạn có thể lưu trữ một chức năng trong một JS biến đổi không?

Các chức năng được lưu trữ trong các biến không cần tên chức năng. Chúng luôn được gọi [được gọi] bằng cách sử dụng tên biến. Hàm trên kết thúc bằng dấu chấm phẩy vì nó là một phần của tuyên bố thực thi.. They are always invoked [called] using the variable name. The function above ends with a semicolon because it is a part of an executable statement.

Tôi có thể gán một hàm cho một biến không?

Trong Python, chúng ta có thể gán một hàm cho một biến.Và sử dụng biến đó, chúng tôi có thể gọi hàm nhiều như thời gian chúng tôi muốn.Do đó, tăng khả năng tái sử dụng mã.Chỉ cần gán một hàm cho biến mong muốn nhưng không có [] tức là chỉ với tên của hàm.we can assign a function to a variable. And using that variable we can call the function as many as times we want. Thereby, increasing code reusability. Simply assign a function to the desired variable but without [] i.e. just with the name of the function.

Bạn có thể lưu trữ gì trong một JavaScript biến?

Các biến JavaScript có thể giữ các số như 100 và giá trị văn bản như "John Doe".Trong lập trình, các giá trị văn bản được gọi là chuỗi văn bản.JavaScript có thể xử lý nhiều loại dữ liệu, nhưng bây giờ, chỉ cần nghĩ về số và chuỗi.numbers like 100 and text values like "John Doe". In programming, text values are called text strings. JavaScript can handle many types of data, but for now, just think of numbers and strings.

Chúng ta có thể lưu trữ một tên hàm trong một biến và sau đó gọi nó thông qua biến không?

Vì vậy, có thể lưu trữ một hàm được đặt tên bên trong một biến, nhưng chúng tôi vẫn chỉ có thể gọi hàm theo tên biến.it is possible to store a named function inside a variable, but we still can only call the function by the variable name.

Bài Viết Liên Quan

Chủ Đề