Js 펀더멘탈 잘 몰라도 개발은 가능함
문제는 어떤 버그가 발생 했을 때 왜 발생 했는지 문제점을 찾기가 힘듦
익명(175.209)2020-10-31 17:51
답글
전혀 아님, 대부분 문제는 갖다쓰는 라이브러리에서 발생하고 그 라이브러리문제는 js 펀더멘탈 아는거랑 관련없이 에러메시지 스택오버플로우 검색력에 좌우된다
익명(106.102)2020-10-31 17:52
답글
그런 라이브러리를 만들고 '내가' 유지보수해야 js펀더멘탈이 빛을 발할텐데 현실은 프레임워크에서 구글링하는 신세
익명(106.102)2020-10-31 17:52
답글
예시 상황 한개를 말해드림
Call by reference 개념을 모르고 그냥 뮤터블하게 참조 타입의 값을 수정하다가 사이드 이펙트로 인해 어떤 값 두개가 동시에 변경됐을 때 에러메시지로 문제를 파악할 수 있을까? 아마 에러메시지가 표시되지도 않을 듯
익명(175.209)2020-10-31 17:55
답글
요즘 리액트가 주입시킨 스타일덕에 두군데서 동시에 참조할일없다, 그리고 js는 콜바이밸류다, 콜바이레퍼런스라고 가끔 착각하는 사람들이있는데 레퍼런스의 밸류를 넘기기때문에 콜바이밸류임
익명(106.102)2020-10-31 17:57
답글
무튼 니가말한지식은 js펀더멘탈도 아니잖아, 다른 언어들에도 다 있는 특성임
익명(106.102)2020-10-31 17:58
답글
MDN 같은 사이트에도 뻔히 call by reference라고 적혀있는데 면접 가서 그말 해보셈 ㅋㅋ
익명(175.209)2020-10-31 17:59
답글
js 펀더멘탈이면 프로토타입 체이닝이라거나 클로저(물론 다른언어들에도 존재하는데 js에서 많이 활용)같은거 얘기해야지, 그리고 위 두개 좆도몰라도 문제없음
익명(106.102)2020-10-31 17:59
답글
그럼 MDN이 잘못된거지, C언어도 모든게 call by value라고 창시자가 말하는데 js도 call by value다
익명(106.102)2020-10-31 17:59
답글
어쨌든 콜바밸이든 콜바레든 용어는 중요한게아니니까 넘기고, js펀더멘탈 개발에 좆도 무쓸모임
익명(106.102)2020-10-31 18:00
답글
ㅇㅇ 뭐 그렇게 생각하면 계속 그렇게 여기면서 개발하셈
그러면 평생 네임드 기업 못 갈텐데 거기에 만족하면서 사는거지 뭐 ㅋ
익명(175.209)2020-10-31 18:03
답글
네임드기업 잘 다니고있다, 니가 생각하는 네임드기업이 어느정도인지는 모르겠는데 네카라정도면 네임드기업아닌가?
익명(106.102)2020-10-31 18:04
답글
ㅋㅋㅋ 명함 인증해보셈 나도 인증해드림
익명(175.209)2020-10-31 18:07
답글
인증하면 내가 얻는게 뭐냐
익명(106.102)2020-10-31 18:07
답글
ㅇㅇ 그렇게 정신승리 열심히 하셈
나도 네카라 면접 본적 있는데 경험이 중요한 시니어가 아닌 이상 펀더멘탈 잘 모르면 붙을 수가 없음 ^^
익명(175.209)2020-10-31 18:09
답글
와 reference의 value를 넘기기 때문에 CBV래 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그러면서 C랑 비교하고 앉아있네 아니 씨발 C랑 JavaScript는 바탕에 있는 계산 모델 자체가 다른데 어떻게 그걸 비교하냐 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ JavaScript는 CBR이지 씨발
밍고스사랑해(mingosudaisuki)2020-10-31 18:10
답글
무식 그 자체
밍고스사랑해(mingosudaisuki)2020-10-31 18:10
답글
자바스크립크 call by value인데?
익명(106.102)2020-10-31 18:10
답글
자바도 call by value야 이 무식아
익명(106.102)2020-10-31 18:10
답글
C/C++ 용어로 단순화해서 설명하면, 어떤 언어든 레퍼런스는 내부적으로 포인터 비슷한 무언가로 구현이 되는데, C/C++는 언어 특성상 그 포인터의 값을 직접 까볼 수 있기 때문에 레퍼런스도 하나의 값이 되는 거고, 포인터의 값을 까볼 수 없는 JavaScript 같은 언어에서는 레퍼런스는 어디까지나 레퍼런스이기 때문에 C/C++ (특히 C)가 전부 CBV라는 얘기는 말이 돼도 JavaScript가 전부 CBV라는 얘기는 당연히 좆도 성립할수가 없음 ㅋㅋㅋ
Wikipedia 정의에서는 소위 call by (또는 pass by) object sharing이랑 call by reference를 나누고 있는데, call by object sharing은 당연히 call by reference의 변종이고 둘의 동작차이는 실제로 호출이 어떻게 이루어지느냐의 차이가 아니라 이름 binding 차원의 문제지 프로그래밍언어론 시간에 쳐졸았냐?
밍고스사랑해(mingosudaisuki)2020-10-31 18:15
답글
걍 작성자는 MDN같은 표준 명세에 뻔히 적혀있는 내용을 안 믿고 걍 스택오버플로우에 적혀 있는 내용이 무조건 맞다는 논리임
익명(175.209)2020-10-31 18:16
답글
니가 그렇게 강력하게 주장하니까 또 햇갈리는구나, 그러면 C언어 창시자가 call by value라고 했듯이 공식적 답변을 가져오면 해결이 될듯하다
익명(106.102)2020-10-31 18:16
답글
MDN에 call by reference라고 어디적혀있노, 링크주면 한번 들어가서 보겠다
익명(106.102)2020-10-31 18:17
답글
아니 그냥 간단하게 말하면 CBV면 pass되는 건 value니까 어떤 짓을 해도 원래 object는 건드릴 수가 없는 거임. C가 예외인 건 그 '어떤 짓' 중에 포인터라는 개념이 있어서 메모리상의 아무 객체를 포인터 값을 통해 접근할 수 있기 때문이고. C에 포인터가 없다고 생각해보면 금방 알 수 있겠지만 CBV에서는 value가 pass되기 때문에 함수에서 호출측의 object에 영향을 끼칠 수가 없음. 이건 Java/JavaScript에서는 전혀 사실이 아니지
밍고스사랑해(mingosudaisuki)2020-10-31 18:19
답글
그리고 MDN도 공식이 아니라 사용자편집위키로 알고있는데, 신빙성은 비슷하긴 마찬가지다
익명(106.102)2020-10-31 18:21
답글
저 Stack Overflow 답변 같은 데서 JavaScript가 CBR이 아니라고 주장하는 사람이 있다면 그 근거는 (1) primitive type에 대한 특수한 동작 (2) 대입 연산을 할 경우 원래 object에 대입이 일어나지 않는다는 점인데, 얘네는 원래부터 CBV/CBR 차이의 본질이 아님. (1)은 언어가 CBR이라고 해도 primitive type에 대해 동작을 간략하게 하는건 언어 설계상 충분히 있을수있는 특징이니까 상관이 없고, (2) 역시 단지 JavaScript에서의 대입 의미구조가 레퍼런스에 대한 대입을 허용하지 않는것일뿐임
밍고스사랑해(mingosudaisuki)2020-10-31 18:22
답글
위키에는 swap 함수 작동기준으로 판단하던데 Java, js같은건 객체 swap이 C++에서 reference로 넘긴것과 다르게 동작하지않나? 너가 말하고싶은건 이 부분은 결정적 차이가 아니라는거냐?
익명(106.102)2020-10-31 18:25
답글
ㅇㅇ 그부분은 CBV/CBR 차이가 아니라 언어 설계상의 차이지. C++에서는 레퍼런스를 초기화할때 반드시 가리키는 대상을 설정해야 하고, 초기화 이후에는 가리키는 대상을 변경할 수 없는데, 이렇게 하면 레퍼런스에 대입을 하는 동작을 레퍼런스가 가리키는 대상에 대한 동작으로 해석할 수 있는 장점이 있지만, JavaScript처럼 모든 object가 레퍼런스로 동작하는 언어를 이렇게 만들면 당연히 존나게 불편하니까, 레퍼런스 초기화 제한을 풀고, 대상 변경 불가능 제한도 풀 수밖에 없지.
밍고스사랑해(mingosudaisuki)2020-10-31 18:30
답글
조금만 생각해보면 C++에서도 만약 레퍼런스 반드시 초기화해야 한다는 제약이랑 대상 변경 불가능하다는 제약을 없애고 싶다면 JavaScript처럼 레퍼런스에 대입했을 때 가리키는 대상이 바뀌는 동작으로 만들수밖에 없다는 사실을 알게될것임. 이건 대입연산의 의미를 어떻게 정의하냐의 문제지 CBV/CBR의 차이랑은 완전 별개잖어
해당 댓글은 삭제되었습니다.
나도 저런거모른다, 중요한건 저거 쓸 일이 있을때 공부해서 알면되는거지
저딴거 잘 안다고 일 잘하는것도 아니다
Js 펀더멘탈 잘 몰라도 개발은 가능함 문제는 어떤 버그가 발생 했을 때 왜 발생 했는지 문제점을 찾기가 힘듦
전혀 아님, 대부분 문제는 갖다쓰는 라이브러리에서 발생하고 그 라이브러리문제는 js 펀더멘탈 아는거랑 관련없이 에러메시지 스택오버플로우 검색력에 좌우된다
그런 라이브러리를 만들고 '내가' 유지보수해야 js펀더멘탈이 빛을 발할텐데 현실은 프레임워크에서 구글링하는 신세
예시 상황 한개를 말해드림 Call by reference 개념을 모르고 그냥 뮤터블하게 참조 타입의 값을 수정하다가 사이드 이펙트로 인해 어떤 값 두개가 동시에 변경됐을 때 에러메시지로 문제를 파악할 수 있을까? 아마 에러메시지가 표시되지도 않을 듯
요즘 리액트가 주입시킨 스타일덕에 두군데서 동시에 참조할일없다, 그리고 js는 콜바이밸류다, 콜바이레퍼런스라고 가끔 착각하는 사람들이있는데 레퍼런스의 밸류를 넘기기때문에 콜바이밸류임
무튼 니가말한지식은 js펀더멘탈도 아니잖아, 다른 언어들에도 다 있는 특성임
MDN 같은 사이트에도 뻔히 call by reference라고 적혀있는데 면접 가서 그말 해보셈 ㅋㅋ
js 펀더멘탈이면 프로토타입 체이닝이라거나 클로저(물론 다른언어들에도 존재하는데 js에서 많이 활용)같은거 얘기해야지, 그리고 위 두개 좆도몰라도 문제없음
그럼 MDN이 잘못된거지, C언어도 모든게 call by value라고 창시자가 말하는데 js도 call by value다
어쨌든 콜바밸이든 콜바레든 용어는 중요한게아니니까 넘기고, js펀더멘탈 개발에 좆도 무쓸모임
ㅇㅇ 뭐 그렇게 생각하면 계속 그렇게 여기면서 개발하셈 그러면 평생 네임드 기업 못 갈텐데 거기에 만족하면서 사는거지 뭐 ㅋ
네임드기업 잘 다니고있다, 니가 생각하는 네임드기업이 어느정도인지는 모르겠는데 네카라정도면 네임드기업아닌가?
ㅋㅋㅋ 명함 인증해보셈 나도 인증해드림
인증하면 내가 얻는게 뭐냐
ㅇㅇ 그렇게 정신승리 열심히 하셈 나도 네카라 면접 본적 있는데 경험이 중요한 시니어가 아닌 이상 펀더멘탈 잘 모르면 붙을 수가 없음 ^^
와 reference의 value를 넘기기 때문에 CBV래 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그러면서 C랑 비교하고 앉아있네 아니 씨발 C랑 JavaScript는 바탕에 있는 계산 모델 자체가 다른데 어떻게 그걸 비교하냐 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ JavaScript는 CBR이지 씨발
무식 그 자체
자바스크립크 call by value인데?
자바도 call by value야 이 무식아
C/C++ 용어로 단순화해서 설명하면, 어떤 언어든 레퍼런스는 내부적으로 포인터 비슷한 무언가로 구현이 되는데, C/C++는 언어 특성상 그 포인터의 값을 직접 까볼 수 있기 때문에 레퍼런스도 하나의 값이 되는 거고, 포인터의 값을 까볼 수 없는 JavaScript 같은 언어에서는 레퍼런스는 어디까지나 레퍼런스이기 때문에 C/C++ (특히 C)가 전부 CBV라는 얘기는 말이 돼도 JavaScript가 전부 CBV라는 얘기는 당연히 좆도 성립할수가 없음 ㅋㅋㅋ
https://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value
https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference
SO가 진리냐 씨발 ㅋㅋㅋㅋ "my understanding is"로 시작하는것만 봐도 답변자 뇌피셜인게 뻔히 보이는데
Wikipedia 정의에서는 소위 call by (또는 pass by) object sharing이랑 call by reference를 나누고 있는데, call by object sharing은 당연히 call by reference의 변종이고 둘의 동작차이는 실제로 호출이 어떻게 이루어지느냐의 차이가 아니라 이름 binding 차원의 문제지 프로그래밍언어론 시간에 쳐졸았냐?
걍 작성자는 MDN같은 표준 명세에 뻔히 적혀있는 내용을 안 믿고 걍 스택오버플로우에 적혀 있는 내용이 무조건 맞다는 논리임
니가 그렇게 강력하게 주장하니까 또 햇갈리는구나, 그러면 C언어 창시자가 call by value라고 했듯이 공식적 답변을 가져오면 해결이 될듯하다
MDN에 call by reference라고 어디적혀있노, 링크주면 한번 들어가서 보겠다
아니 그냥 간단하게 말하면 CBV면 pass되는 건 value니까 어떤 짓을 해도 원래 object는 건드릴 수가 없는 거임. C가 예외인 건 그 '어떤 짓' 중에 포인터라는 개념이 있어서 메모리상의 아무 객체를 포인터 값을 통해 접근할 수 있기 때문이고. C에 포인터가 없다고 생각해보면 금방 알 수 있겠지만 CBV에서는 value가 pass되기 때문에 함수에서 호출측의 object에 영향을 끼칠 수가 없음. 이건 Java/JavaScript에서는 전혀 사실이 아니지
그리고 MDN도 공식이 아니라 사용자편집위키로 알고있는데, 신빙성은 비슷하긴 마찬가지다
저 Stack Overflow 답변 같은 데서 JavaScript가 CBR이 아니라고 주장하는 사람이 있다면 그 근거는 (1) primitive type에 대한 특수한 동작 (2) 대입 연산을 할 경우 원래 object에 대입이 일어나지 않는다는 점인데, 얘네는 원래부터 CBV/CBR 차이의 본질이 아님. (1)은 언어가 CBR이라고 해도 primitive type에 대해 동작을 간략하게 하는건 언어 설계상 충분히 있을수있는 특징이니까 상관이 없고, (2) 역시 단지 JavaScript에서의 대입 의미구조가 레퍼런스에 대한 대입을 허용하지 않는것일뿐임
위키에는 swap 함수 작동기준으로 판단하던데 Java, js같은건 객체 swap이 C++에서 reference로 넘긴것과 다르게 동작하지않나? 너가 말하고싶은건 이 부분은 결정적 차이가 아니라는거냐?
ㅇㅇ 그부분은 CBV/CBR 차이가 아니라 언어 설계상의 차이지. C++에서는 레퍼런스를 초기화할때 반드시 가리키는 대상을 설정해야 하고, 초기화 이후에는 가리키는 대상을 변경할 수 없는데, 이렇게 하면 레퍼런스에 대입을 하는 동작을 레퍼런스가 가리키는 대상에 대한 동작으로 해석할 수 있는 장점이 있지만, JavaScript처럼 모든 object가 레퍼런스로 동작하는 언어를 이렇게 만들면 당연히 존나게 불편하니까, 레퍼런스 초기화 제한을 풀고, 대상 변경 불가능 제한도 풀 수밖에 없지.
조금만 생각해보면 C++에서도 만약 레퍼런스 반드시 초기화해야 한다는 제약이랑 대상 변경 불가능하다는 제약을 없애고 싶다면 JavaScript처럼 레퍼런스에 대입했을 때 가리키는 대상이 바뀌는 동작으로 만들수밖에 없다는 사실을 알게될것임. 이건 대입연산의 의미를 어떻게 정의하냐의 문제지 CBV/CBR의 차이랑은 완전 별개잖어
뮤터블 싫어용