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
パラメータ問題:JavaScriptはパラメータが渡されないことがあり、任意のパラメータを渡すことができます〜
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.変数のスコープ
JavaScriptでは、VAR実際の変数がスコープに定義されています。
関数本体内と仮定の文、関数がin vitroで使用することはできません- (当時を振り返ることができます非達成するために闭包
)
function yy() {
var x = 1;
x = x + 1;
}
x = x + 2; //Uncaught ReferenceError: x is not defined
2つの関数は同じ変数名を使用する場合は、限り内部機能として、競合しません
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()
「から「外」な表情で「」変数」、スタートと同じ名前の外部変数関数は、外部関数を遮蔽する内部関数が存在すると仮定 - 独自の関数から変数のためのJavaScript関数であるとします。。
変数のスコープを強化するために、
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';
}
これは、既存の性質上、JavaScriptのビルドの始まりです。仕様を開発:すべての変数は、簡単にコードの保守を置き忘れていない、関数の先頭で定義されています。
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);
Javascriptが、それは関数スコープで見つからないと仮定すると、実際にはグローバルスコープ、任意の変数(関数も変数とみなすことができる)であるグローバルスコープで見つからない場合は、見つけるだろう、エラー 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.メソッド
定義方法
この方法は、オブジェクト内部のオブジェクト内の関数である2つのだけのものである:プロパティとメソッド
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,参数为空