美文网首页
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