美文网首页
RN学习记录

RN学习记录

作者: 走进科学 | 来源:发表于2018-02-09 19:55 被阅读55次

了解RN

2018-2-8 (3h)搭建环境

  • 搭建了Mac下的Android和iOS的开发环境环境搭建

2018-2-9 JavaScrip基础学习

  • 学习地址
  • 存疑:JS代码通常写在<head>中仅因为约定的习惯,还有存在一定必要性?
  • 用 '===' 代替 '=='
  • 用isNaN判断NaN
  • 浮点数比较
1 / 3 === (1 - 2 / 3); // false 
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
  • JS接受的函数可以接受任意类型,数量的参数.函数里声明的参数按顺序去参数列表中取.
function foo(a, b) {
}
foo(10, 20, 30);  // a = 10, b = 20, 30没有var匹配 只能有arguments获取
foo(10);  // a = 10, b = undefined
foo(); // a = undefined, b = undefined
  • 变量提升
    JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:
function foo() {
    var x = 'Hello, ' + y;  // 不会报错
    console.log(x);        // Hello, undefined
    var y = 'Bob';
}
实际效果为下面的函数
function foo() {
    var y; // 提升变量y的申明,此时y为undefined
    var x = 'Hello, ' + y;
    console.log(x);
    y = 'Bob';
}
  • 作用域: 不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性:
var course = 'Learn JavaScript';
alert(course); // 'Learn JavaScript'
alert(window.course); // 'Learn JavaScript'

其实函数也是一种具有全局作用域的变量

function foo() {
    alert('foo');
}

foo(); // 直接调用foo()
window.foo(); // 通过window.foo()调用
  • 大坑this指针
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var y = new Date().getFullYear();
        return y - this.birth;
    }
};

xiaoming.age; // function xiaoming.age()
xiaoming.age(); // 今年调用是25,明年调用就变成26了
    var y = new Date().getFullYear();
    return y - this.birth;
}

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: getAge
};

xiaoming.age(); // 25, 正常结果
getAge(); // NaN
var fn = xiaoming.age; // 先拿到xiaoming的age函数
fn(); // NaN
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var y = new Date().getFullYear();
        return y - this.birth;
    }
};

var fn = xiaoming.age;
fn(); // Uncaught TypeError: Cannot read property 'birth' of undefined
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        function getAgeFromBirth() {
            var y = new Date().getFullYear();
            return y - this.birth;
        }
        return getAgeFromBirth();
    }
};

xiaoming.age(); // Uncaught TypeError: Cannot read property 'birth' of undefined
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var that = this; // 在方法内部一开始就捕获this
        function getAgeFromBirth() {
            var y = new Date().getFullYear();
            return y - that.birth; // 用that而不是this
        }
        return getAgeFromBirth();
    }
};

xiaoming.age(); // 25

总结每个函数都会隐式声明斌复制一个this指针,该指针指向该函数的调用对象.且this指针不遵守就近原则

正解:
'use strict';

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var that = this; // 在方法内部一开始就捕获this
        function getAgeFromBirth() {
            var y = new Date().getFullYear();
            return y - that.birth; // 用that而不是this
        }
        return getAgeFromBirth();
    }
};

xiaoming.age(); // 25

2018-2-10 继续JavaScrip基础学习

相关文章

网友评论

      本文标题:RN学习记录

      本文链接:https://www.haomeiwen.com/subject/ynxxtftx.html