1. 정의 함수
정의 된 방법
1. 절대 값 함수
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
}
일단 함수 끝 부분에 대신 반환에 실행하고 결과를 반환합니다!
돌이킬 수없는 경우, 그 결과를 반환하는 기능을 수행, 결과는 정의되지
두 번째 방법은 정의된다
var abs = function(x){
if(x>=0){
return x;
}else{
return -x;
}
}
함수 (X)는 {...}이 익명의 함수이다. 그러나 복근에 결과를 할당 할 수 있습니다, 당신은 복근하여 함수를 호출 할 수 있습니다!
두 번째 방법 및 방법에 해당!
통화 기능
abs(10) //10
abs(-10) //10
매개 변수 문제가 : 자바 스크립트가 매개 변수를 전달할 수있는 매개 변수가 통과 할 수 없습니다 ~
var abs = function(x){
//手动抛出异常来判断
if (typeof x!== 'number') {
throw 'Not a Number';
}
if(x>=0){
return x;
}else{
return -x;
}
}
인수
arguments
키워드 무료 JS입니다;
대표가 모든 매개 변수에 전달 된 배열입니다!
var abs = function(x){
console.log("x=>"+x);
for (var i = 0; i<arguments.length;i++){
console.log(arguments[i]);
}
if(x>=0){
return x;
}else{
return -x;
}
}
질문 : 인수는 우리가 때때로 추가 작업에 추가 매개 변수를 사용하려면, 모든 매개 변수가 포함되어 있습니다. 기존의 매개 변수를 제외 할 필요 -
쉬다
전 :
if (arguments.length>2){
for (var i = 2; i<arguments.length;i++){
//。。。。
}
}
.... 매개 변수에 정의 된 - ES6의 새로운 기능은 모든 매개 변수를 얻을뿐만 아니라, 도입
function aaa(a,b,...rest) {
console.log("a=>"+a);
console.log("b=>"+b);
console.log(rest);
}
매개 변수는 최종 표면에 쓸 수있는 휴식, 식별하는 ... 사용되어야합니다.
2. 변수 범위
자바 스크립트, VAR 실제 변수는 범위를 정의한다.
함수 본문에서 가정하자 문, 함수에서 사용할 수 없습니다 체외 - (다시 볼 수 후 비 달성하기 위해 闭包
)
function yy() {
var x = 1;
x = x + 1;
}
x = x + 2; //Uncaught ReferenceError: x is not defined
두 기능은 동일한 변수 이름을 사용하는 경우, 긴 내장 함수로서 충돌하지
function yy() {
var x = 1;
x = x + 1;
}
function yy1() {
var x = 'A';
x = x + 1;
}
내부 기능은 그 반대, 외부의 멤버 함수에 액세스 할 수 있습니다
function yy() {
var x = 1;
// 内部函数可以访问外部函数的成员,反之则不行
function yy2() {
var y = x + 1; // 2
}
var z = y + 1; // Uncaught ReferenceError: y is not defined
}
가정 그 함수 변수와 동일한 이름의 외부 함수 내부 변수!
function yy() {
var x = 1;
function yy2() {
var x = 'A';
console.log('inner'+x); // outer1
}
console.log('outer'+x); //innerA
yy2()
}
yy()
. ', 시작 외부'보기 '에서'와 '는'변수를 같은 이름의 외부 변수 함수가 외부 함수를 차폐의 내부 기능을 존재한다고 가정 - 자신의 함수와 변수에 대한 자바 스크립트 함수로 가정하자.
변수의 범위를 향상시킬
function yy() {
var x = "x" + y;
console.log(x);
var y = 'y';
}
결과 : xundefined
설명, JS 실행 엔진이 자동으로 Y의 선언을 향상하지만, 할당 변수 y '를 개선하지 않을 것이다;
function qj2() {
var y;
var x = "x" + y;
console.log(x);
y = 'y';
}
이것은 기존의 속성에 자바 스크립트 빌드의 시작입니다. 사양을 개발 : 모든 변수가 쉬운 코드를 유지 보수를 관리 못하는 아니라 기능의 머리에서 정의됩니다;
function yy2() {
var x = 1,
y = x + 1,
z,i,a; //undefined
// 之后随意用
}
전역 함수
//全局变量
x = 1;
function f() {
console.log(x);
}
f();
console.log(x);
글로벌 객체 창
var x = 'xxx';
alert(x);
alert(window.x); // 默认所有的全局变量,都会自动绑定在 window对象下;
경보 () 함수 자체가 인 window
변수;
var x = 'xxx';
window.alert(x);
var old_alert = window.alert;
//old_alert(x);
window.alert = function () {
};
// 发现 alert() 失效了
window.alert(123);
//恢复
window.alert = old_alert;
window.alert(456);
전역 범위에서 발견되지 않는 경우는 자바 스크립트가, 발견 할 것이다 실제로 기능 범위에없는 것을 가정에만 글로벌 범위, 어떤 변수 (함수가 아니라 변수로 간주 할 수있다)이며, 오류 RefrenceError
명세서
글로벌 변수의 모든 때문에 우리의 창으로 바인딩됩니다. 다른 JS 파일, 같은 전역 변수, 갈등을 사용하는 경우 -> 경우 당신은 충돌을 줄일 수있다?
// 唯一全局变量
var KuangApp = {};
// 定义全局变量
KuangApp.name = 'yy';
KuangApp.add = function (a,b) {
return a + b;
}
이름 충돌의 글로벌 문제를 줄이고, 자신의 고유 한 이름 공간 정의에 모든 코드를 넣어 -
jQuery를
로컬 범위하자
function aaa() {
for (var i = 0; i < 100; i++) {
console.log(i)
}
console.log(i+1); //问题? i 出了这个作用域还可以使用
}
ES6는 지역 범위 해결 충돌을 키워드하자!
function aaa() {
for (let i = 0; i < 100; i++) {
console.log(i)
}
console.log(i+1); //Uncaught ReferenceError: i is not defined
}
난 당신이 사용하는 것이 좋습니다 let
지역 변수의 범위를 정의;
상수 const를
ES6하기 전에, 어떻게 상수를 정의합니다 : 만 모두 대문자를 사용라는 이름의 변수가 일정, 추천이 값을 수정하지
var PI = '3.14';
console.log(PI);
PI = '213'; //可以改变这个值
console.log(PI);
ES6의 정수 키워드를 도입 const
const PI = '3.14'; // 只读变量
console.log(PI);
PI = '123'; // TypeError: Assignment to constant variable.
console.log(PI);
3. 방법
정의 방법
속성들 및 방법 :이 방법은 개체가 오직 두 가지가 내부 객체 함수이고
var yy = {
name: '洋',
bitrh: 2000,
// 方法
age: function () {
// 今年 - 出生的年
var now = new Date().getFullYear();
return now-this.bitrh;
}
}
//属性
yy.name
//方法,一定要带 ()
yy.age()
이. 무엇 대표? 외에도 위의 코드는 ~ 참조
function getAge() {
// 今年 - 出生的年
var now = new Date().getFullYear();
return now-this.bitrh;
}
var yy = {
name: '洋',
bitrh: 2000,
age: getAge
}
// yy.age() ok
// getAge() NaN window
이것은, 지점 아니다는 기본 객체 호출을 가리키는 것입니다;
대다
JS에서이 점을 제어 할 수 있습니다!
function getAge() {
// 今年 - 出生的年
var now = new Date().getFullYear();
return now-this.bitrh;
}
var yy = {
name: '洋',
bitrh: 2000,
age: getAge
};
var xiaoming = {
name: '小明',
bitrh: 2000,
age: getAge
};
// yy.age() ok
getAge.apply(xiaoming,[]);// this,指向了 yy,参数为空