JavaScript 함수 호출
함수 호출 시 함수 본문 코드가 실행됩니다.
Javascript 함수에는 4가지 호출 메서드가 있습니다.
일반 함수 호출
메서드 호출
생성자 호출
call() 및 Apply()를 통한 간접 호출
1. 일반적인 함수 호출
가장 일반적으로 사용되는 방법 다음과 같은 함수 호출 메서드:
alert("hello");
var result = add(1, 2);
2. 메서드 호출
//함수 정의
function hello(name) {
Alert('hello,' + name);
};
var user = {};
//사용자 sayHi 속성에 할당됨
user.sayHi = hello;
//메소드 호출
user.sayHi('Zhang San');
일반적인 함수 호출과 메서드 호출 한 가지 차이점: "일반 함수 호출" 메서드에서 함수 호출 컨텍스트(this의 값)는 전역 객체(비엄격 모드)이거나 정의되지 않음(엄격 모드)입니다. "메서드 호출" 메서드에서 이는 현재 개체를 가리킵니다. 이 기능을 사용하면 메서드에 명확한 반환 값이 필요하지 않을 때 이를 직접 반환할 수 있어 "메서드 체이닝"이 실현됩니다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> function myFunction(a, b) { return a * b; } document.getElementById("demo").innerHTML = myFunction(10, 2); </script> </body> </html>
중첩 함수의 이 점: 중첩 함수에서 내부 함수는 외부 함수에서 this를 상속하지 않습니다. 즉, 내부 함수가 메서드로 호출될 때 내부 함수의 this는 현재 호출 개체를 가리킵니다. 내부 함수가 함수로 호출될 때 this의 값은 전역 객체(비엄격 모드)이거나 정의되지 않음(엄격 모드)입니다. 내부 함수에서 외부 함수에 어떻게 접근하나요? 이는 일반적으로 지역 변수에 저장되며 변수를 통해 액세스됩니다.
var obj = {
f : function() {
var self = this;
console.log(this == = obj);//true, 이는 현재 개체를 가리킵니다
|
console.log(self === obj) ;///true, self는 현재 객체인 외부 this를 가리킵니다. 이것은 전역 객체이거나 정의되지 않았습니다. };
3. 생성자 호출
new 키워드를 사용하여 객체를 생성하면 생성자가 호출됩니다. 생성자에 형식 매개변수가 없으면 괄호를 생략할 수 있습니다.
var obj = new Object();//Equivalent to
var obj = new Object;
생성자를 호출하고 새 개체를 만듭니다. 이 새 개체는 생성자의 호출 컨텍스트(this의 값)가 됩니다.
function User(name) {
this.name=name;
Console.debug(this);
}
var user = new User('张三');
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } var x = new myFunction("John","Doe") document.getElementById("demo").innerHTML = x.firstName; </script> </body> </html>
4.
var name = 'A';
경고 (this.name);}
showName();//A, 이것은 전역 객체입니다
showName .call(user);//B, 이것은 사용자 객체입니다
apply()는 call()과 유사하지만 차이점은 후속 실제 매개변수가 배열 형식으로 전달되어야 한다는 것입니다(인수 배열). 현재 함수의 내용을 직접 전달할 수 있습니다).