谈谈原生 JS

现在的前端开发,大部分人一上手,就是去用 jquery,zepto,更有就是vue. 而react或者 NG对初学者来说,还是有些门槛。

既然这些库这么好用,还有必要去学习原生JS吗?

原生 JS可以认为是砖块,要构建一个成功的项目或者产品,要求开发人员对数据结构,模块划分,函数划分,异步调用等知识能够真正的从系统设计,软件工程的角度去思考。可是行业发展太快,供不应求,所以一些框架及时出现,降低了开发的门槛。满足了业务需要。

那是不是满足业务需要就够了呢? 其实主要还是看你自己,如果你要做业务专家,那可以主要精力聚焦业务模型,把实现交给他人。

而如果你要做技术专家,那么原生JS还是要精进的,毕竟通过原生JS,你对于DOM,原型, 闭包,立即执行函数,高阶函数,异步通信机制,才能有更加深刻学些和掌握。

通过原生JS,可以让你真正掌握JS这门语言。

(function(global) {
    // body...
    

   function hello() {
    // body...
    console.log("hello");
    alert("hello");
   }

   var data= [
          {id:1,name:"one",price:100},
           {id:1,name:"one",price:100},
            {id:1,name:"one",price:100},
             {id:1,name:"one",price:100},
              {id:1,name:"one",price:100},
               {id:1,name:"one",price:100},
                {id:1,name:"one",price:100}
      ];


      function initPage() {
        // body...
        var ul = createElement("ul");
        ul.className = "list";
         var fragment = document.createDocumentFragment();
        for(var i=0;i<data.length;i++){
          var li = createElement("li");
          li.className = "item";
          var nameEl = createElement("span");
          nameEl.className = "col";
          nameEl.textContent =  data[i].name;
          li.appendChild(nameEl);

          var priceEl = createElement("span");
           priceEl.className = "col";
          priceEl.textContent =  data[i].price;
          li.appendChild(priceEl);

          console.log(nameEl.compareDocumentPosition(document.getElementById("xx")));
           console.log(nameEl.isSameNode(priceEl));
           console.log(nameEl.isContentEditable);
          li.setAttribute("data-value",data[i].price)
          // console.log(li.getUserData("data-value"));
          fragment.append(li);
        }
        ul.appendChild(fragment);
        var attrul = document.createAttribute("id");
        attrul.value ="10";
        ul.setAttributeNode(attrul);
        document.getElementById("xx").appendChild(ul);  

      }
      
       
     
      function createElement(type) {
         return document.createElement(type);

      }

     global.hello = hello;
     global.initPage = initPage;


     global.initModule = {
        hello:hello,
        initPage:initPage
     }

})(window)
image.png

基于原生JS的模块,快速操作DOM的fragment,动态创建DOM元素和属性的方式。

下面这篇文章对一些基础概念做了比较好的讲解
https://blog.csdn.net/liujie19901217/article/details/52088182

1.变量,值类型,引用类型

  • 栈内存中存放的是基本数据类型值,堆内存中存放的是引用类型值,引用类型值在内存中的地址存放在栈中,也就是我们常说的对象对象引用(指针)。

  • 在变量复制方面,基本类型和引用类型也有所不同,基本类型复制的是值本身,而引用类型复制的是内存地址。
    2,this
    3,执行环境及作用域
    4,内存泄漏常见情况

  • 闭包,循环引用,计时器清除

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    伯纳乌的追风少年阅读 25,937评论 2 46
  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    极乐君阅读 5,661评论 0 106
  • 我们互相亏欠,我们藕断丝连。如何用一句话形容初恋?有人说:后来我终于知道,它并不是我的花,我只是恰好途径了它的盛放...
    王大纯阅读 3,168评论 17 79
  • 为什么他工作一年超越你五年经验? 在你的身边是不是经常有这样的事情发生:1、只有工作了一年的同事比工作了五年的你...
    慣看春秋阅读 143评论 0 0
  • 家人和亲友都开始提高自爱的意识了,学习好好照顾自己的健康。过节后更需要为暴食的身体善后。大家都知道最好是喝茶,但对...
    瀑飞阅读 437评论 0 0