2012-12-21 46 views
5

Tôi muốn sử dụng hàm nội dòng với các đối số để đặt biến. Đây là một phiên bản luộc xuống (mà dường như chỉ là mã giả vào thời điểm này) của những gì tôi đang cố gắng:Truyền các đối số vào một hàm nội tuyến

var something = 10; 

var something_else = 15; 

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(); 

Trong trường hợp này, "dynamic_value" nên là "y". Vấn đề là các biến "cái gì đó" và "something_else" không bao giờ được thấy bên trong hàm inline này.

Làm thế nào để bạn gửi đối số đến một hàm nội tuyến?

chỉnh sửa: Tôi đang sử dụng jquery, mặc dù điều đó có thể không thực sự áp dụng cho câu hỏi này.

Trả lời

13

Gửi cho họ trong khi gọi chức năng

var dynamic_value = (function(something, something_else) { 
    ... 
})(value_for_something, value_for_something_else); 
+0

Oooohhh, vì vậy những parens đó sẽ được chuyển vào trong các hàm parens. Điều đó hoạt động. Cảm ơn bạn! – Ben

+1

Gọi một hàm như thế cũng giống như gọi bất kỳ hàm nào khác. Cú pháp trông hơi lạ, nhưng nó thực sự không khác nhau. –

5

Bạn sẽ cần phải gọi nó như thế này.

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(something,something_else); 

Lý do là khi bạn xác định cùng tên trong tham số chức năng, chúng chỉ là tên của tham số, các biến không được chèn vào đó. Dòng cuối cùng là gọi hàm mà các biến thực tế được chuyển.

Bên cạnh đó, bạn vừa tạo xong một đóng. Việc đóng có quyền truy cập vào tất cả các biến được khai báo trong hàm chứa nó. Một thực tế thú vị khác trong đoạn mã này là các biến được định nghĩa ở mức hàm chứa có được làm mờ bởi các biến là một phần của hàm đóng. Lý do là rõ ràng: các tên biến tại đóng cũng giống như tên biến tại hàm chứa.

0

Tôi sẽ đoán ở đây rằng bạn muốn dynamic_value để chỉ liên kết với something nhưng không phải something_else.

var base_value = 10; 

var something_else = 15; 

var dynamic_value = (function(base_value){ 
    return function (compare) { 
     if(base_value == compare){ 
      return "x"; 
     } else { 
      return "y"; 
     } 
    }; 
})(base_value); 

alert(dynamic_value(something_else)); // "y" 
alert(dynamic_value(10)); // "x" 
Các vấn đề liên quan