JavaScript 함수를 매개 변수로 전달합니다.
어떻게 나는"부모"기능에 기능 실행 중인 또는 함수를을 사용하여"부모"함수로 실행하거나 함수를 사용하지 않고 함수를 매개 변수로 전달하려면 어떻게해야 합니까 없는 변수로 사용하는 함수를 통과합니까?eval()
?(이후 나는 그것이 위험해요 읽었다.).(불안하다고 읽었으니까)
이거 있어요.
addContact(entityId, refreshContactList());
그것은겠지만, 문제는효과는 있지만 문제는입니다.refreshContactList
오히려 그때 그것은 기능에 사용되는 것보다 화재는 함수 호출하는 경우.함수에 사용되는 시간이 아니라 함수가 호출될 때 호출됩니다.
저는 그 정도수 있었다 피할 나는 그것을을 사용하여를 가져올 수 있다.eval()
그러나 그게 전부는 아닌 최고의 연습, 나는 무엇을 읽었는지에 따라.하지만 제가 읽은 바로는 그게 베스트 프랙티스는 아니라고 합니다.어떻게 나는 매개 변수로 자바 스크립트의 기능을 주니?JavaScript에서 함수를 매개 변수로 전달하려면 어떻게해야 합니까?
괄호를 삭제하기만 하면 됩니다.
addContact(entityId, refreshContactList);
그런 다음 먼저 실행하지 않고 함수를 전달합니다.
다음은 예를 제시하겠습니다.
function addContact(id, refreshCallback) {
refreshCallback();
// You can also pass arguments if you need to
// refreshCallback(id);
}
function refreshContactList() {
alert('Hello World');
}
addContact(1, refreshContactList);
함수를 전달하려면 괄호 없이 이름으로 참조합니다.
function foo(x) {
alert(x);
}
function bar(func) {
func("Hello World!");
}
//alerts "Hello World!"
bar(foo);
단, 인수를 포함한 함수를 전달하고 싶지만 콜백이 호출될 때까지 호출하지 않을 수 있습니다.이렇게 하려면 호출할 때 다음과 같이 익명 함수로 랩합니다.
function foo(x) {
alert(x);
}
function bar(func) {
func();
}
//alerts "Hello World!" (from within bar AFTER being passed)
bar(function(){ foo("Hello World!") });
필요에 따라 apply 함수를 사용하여 다음과 같은 인수 배열의 세 번째 파라미터를 설정할 수도 있습니다.
function eat(food1, food2) {
alert("I like to eat " + food1 + " and " + food2 );
}
function myFunc(callback, args) {
//do stuff
//...
//execute callback when finished
callback.apply(this, args);
}
//alerts "I like to eat pickles and peanut butter"
myFunc(eat, ["pickles", "peanut butter"]);
예 1:
funct("z", function (x) { return x; });
function funct(a, foo){
foo(a) // this will return a
}
예 2:
function foodemo(value){
return 'hello '+value;
}
function funct(a, foo){
alert(foo(a));
}
//call funct
funct('world!',foodemo); //=> 'hello world!'
기능을 파라미터로 전달하려면 브래킷을 제거하기만 하면 됩니다!
function ToBeCalled(){
alert("I was called");
}
function iNeedParameter( paramFunc) {
//it is a good idea to check if the parameter is actually not null
//and that it is a function
if (paramFunc && (typeof paramFunc == "function")) {
paramFunc();
}
}
//this calls iNeedParameter and sends the other function to it
iNeedParameter(ToBeCalled);
이 배경에는 함수가 변수와 매우 유사하다는 생각이 있습니다.쓰는 대신
function ToBeCalled() { /* something */ }
너는 쓰는 편이 낫다.
var ToBeCalledVariable = function () { /* something */ }
두 가지 사이에는 사소한 차이가 있지만 어쨌든 두 가지 모두 함수를 정의하는 데 유효한 방법입니다.함수를 정의하고 변수에 명시적으로 할당하면 다른 함수에 파라미터로 전달할 수 있으며 괄호는 필요 없습니다.
anotherFunction(ToBeCalledVariable);
JavaScript 프로그래머들 사이에 "Eval is Evil"이라는 말이 있습니다.그러니 무슨 일이 있어도 피하도록 하세요!
Steve Fenton의 답변 외에 직접 함수를 전달할 수도 있습니다.
function addContact(entity, refreshFn) {
refreshFn();
}
function callAddContact() {
addContact("entity", function() { DoThis(); });
}
나는 그 문제로 머리를 다 잘랐다.위의 예를 만들 수 없었기 때문에, 다음과 같이 종료했습니다.
function foo(blabla){
var func = new Function(blabla);
func();
}
// to call it, I just pass the js function I wanted as a string in the new one...
foo("alert('test')");
그리고 그것은 마법처럼 작용하고 있다...적어도 내가 필요한 걸 위해서요.도움이 되길 바랍니다.
나는 배열의 매개 변수에 대해 말한 다음 파라미터를 배열에 배치한 후 다음 다음 명령어를 사용하여 분할할 것을 권장합니다를 사용하여 그들이 갈라서게 한다고 제안한다..apply()
기능.기능. 이제 우리는 쉽게 매개 변수 많은과 간단한 방법에서 실행하는 기능을 통과할 수 있다.따라서 많은 파라미터를 가진 함수를 쉽게 통과시켜 간단한 방법으로 실행할 수 있습니다.
function addContact(parameters, refreshCallback) {
refreshCallback.apply(this, parameters);
}
function refreshContactList(int, int, string) {
alert(int + int);
console.log(string);
}
addContact([1,2,"str"], refreshContactList); //parameters should be putted in an array
를 사용할 수도 있습니다.eval()
같은 일을 하게끔 말이야
//A function to call
function needToBeCalled(p1, p2)
{
alert(p1+"="+p2);
}
//A function where needToBeCalled passed as an argument with necessary params
//Here params is comma separated string
function callAnotherFunction(aFunction, params)
{
eval(aFunction + "("+params+")");
}
//A function Call
callAnotherFunction("needToBeCalled", "10,20");
바로 그겁니다.저도 이 솔루션을 찾고 있었습니다.다른 답변에 기재된 솔루션을 시험해 보았습니다만, 위의 예에서 실현되었습니다.
또 다른 접근법이 있습니다.
function a(first,second)
{
return (second)(first);
}
a('Hello',function(e){alert(e+ ' world!');}); //=> Hello world
사실, 좀 복잡한 것 같긴 한데, 그렇지 않아.
매개 변수로 메서드를 가져옵니다.
function JS_method(_callBack) {
_callBack("called");
}
파라미터 메서드로서 다음과 같이 지정할 수 있습니다.
JS_method(function (d) {
//Finally this will work.
alert(d)
});
다른 답변은 무슨 일이 일어나고 있는지를 설명하는 데 매우 효과적이지만, 중요한 "알았다"는 것은 여러분이 통과하는 것이 무엇이든지 간에 실제로 함수에 대한 참조가 되도록 하는 것입니다.
예를 들어 함수 대신 문자열을 통과하면 다음과 같은 오류가 발생합니다.
function function1(my_function_parameter){
my_function_parameter();
}
function function2(){
alert('Hello world');
}
function1(function2); //This will work
function1("function2"); //This breaks!
'JsFiddle' 참조
이벤트 핸들러를 처리해야 할 때 이벤트를 인수로 전달해야 할 때 리액트, 앵귤러와 같은 현대 라이브러리의 대부분은 이것이 필요할 수 있습니다.
OnSubmit 함수(서드파티 라이브러리의 함수)를 reactjs에 대한 커스텀 검증으로 덮어쓸 필요가 있으며 다음과 같은 함수와 이벤트를 모두 통과했습니다.
원래
<button className="img-submit" type="button" onClick=
{onSubmit}>Upload Image</button>
신기능화upload
그리고 합격했다.onSubmit
인수로서의 이벤트
<button className="img-submit" type="button" onClick={this.upload.bind(this,event,onSubmit)}>Upload Image</button>
upload(event,fn){
//custom codes are done here
fn(event);
}
ES6 사용 시:
const invoke = (callback) => {
callback()
}
invoke(()=>{
console.log("Hello World");
})
함수 전체를 문자열로 전달할 수 있다면 이 코드가 도움이 될 수 있습니다.
convertToFunc( "runThis('Micheal')" )
function convertToFunc( str) {
new Function( str )()
}
function runThis( name ){
console.log("Hello", name) // prints Hello Micheal
}
JSON을 사용하여 JS 함수를 저장하고 전송할 수도 있습니다.
다음 사항을 확인합니다.
var myJSON =
{
"myFunc1" : function (){
alert("a");
},
"myFunc2" : function (functionParameter){
functionParameter();
}
}
function main(){
myJSON.myFunc2(myJSON.myFunc1);
}
이렇게 하면 'a'가 출력됩니다.
다음은 위와 같은 효과가 있습니다.
var myFunc1 = function (){
alert('a');
}
var myFunc2 = function (functionParameter){
functionParameter();
}
function main(){
myFunc2(myFunc1);
}
이는 다음과 같은 효과도 있습니다.
function myFunc1(){
alert('a');
}
function myFunc2 (functionParameter){
functionParameter();
}
function main(){
myFunc2(myFunc1);
}
클래스를 객체 프로토타입으로 사용하는 객체 패러다임:
function Class(){
this.myFunc1 = function(msg){
alert(msg);
}
this.myFunc2 = function(callBackParameter){
callBackParameter('message');
}
}
function main(){
var myClass = new Class();
myClass.myFunc2(myClass.myFunc1);
}
언급URL : https://stackoverflow.com/questions/13286233/pass-a-javascript-function-as-parameter
'programing' 카테고리의 다른 글
상위 폴더에서 모듈 가져오기 (0) | 2022.09.19 |
---|---|
다른 테이블의 값을 포함하는 mysql update 컬럼 (0) | 2022.09.19 |
Python에서 Requests 라이브러리를 사용하여 "사용자-에이전트" 전송 (0) | 2022.09.19 |
Maria와의 JDBC 페일오버/하이 어베이러빌리티에 대한 설명DB (0) | 2022.09.19 |
MariaDB 및 개별 데이터베이스를 사용하는 Django 3.0의 멀티 테넌시(Multi-tenancy) (0) | 2022.09.19 |